6

次のことを手伝ってくれる専門家はいますか?

Cで次のシステムコールがあります:

access()
unlink()
setsockopt()
fcntl()
setsid()
socket()
bind()
listen()

エラー コード -1 および errno EINTR/EAGAIN で失敗する可能性があるかどうかを知りたいです。

これらの EINTR/EAGAIN を処理する必要がありますか?

ドキュメントには EINTR/EAGAIN に関する記述はありませんが、多くの人が EINTR/EAGAIN を扱っています。

どれが正しいですか?

シグナルハンドラーを登録する方法は次のとおりです

この構成では: https://gitorious.org/zepto-web-server/zepto-web-server/source/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd:src/server-signals-support-utility.c

また、EINTRまたはEAGAINを返すことがわかっているいくつかのシステムコールにEINTR/EAGAIN処理を追加したコミットがあります:

4

4 に答える 4

5

割り込みシグナル ハンドラ (フラグをsigaction省略してインストールしたもの、または一部のシステムでこの機能を使用してインストールしたもの)をインストールしない限り .SA_RESTARTsignalEINTR

あなたの特定の関数のリストの中で、ロックに使用された場合にのみ、 をEINTR除いてとにかく経験できるものはありません。fcntlただし、ジョンの回答のリンクは、特定の機能に関する質問に答えるのに役立つはずです。

于 2014-09-08T17:41:22.673 に答える
4

http://man7.org/linux/man-pages/man7/signal.7.htmlを参照してください-- 「システム コールとライブラリ関数の中断...」について説明している下部付近を読み始めてください。これは Linux の男性です。ページですが、この情報は、Unix/Posix/Linux フレーバーのシステムにかなり一般的に適用できます。

于 2014-09-08T17:38:51.497 に答える