2

だから私のアプリケーションの開始時に私は呼び出します

signal(SIGPIPE, SIG_IGN);

私のアプリケーションは SIGPIPE を無視すると思いました。ただし、次のコードで SIGPIPE クラッシュが発生します。

write(fd, outgoingStr->c_str(), size);

ここで、fd は int (ファイル記述子) であり、size は文字列のサイズです。ここで何が間違っていますか?

余談ですが、私は最近、その書き込みを if 内にラップして、返されたエラー値をチェックしていましたが、それが削除されるまで SIGPIPE クラッシュは一度もなかったと思います。if チェックは、エラーがあった場合にコンソールに出力するだけなので、関連があるかどうかはわかりません。

4

1 に答える 1

2

問題は、無視されていても GDB が SIGPIPE で停止することでした。アプリケーションを正常に実行すると、意図したとおりに動作します。

于 2012-10-16T02:36:43.837 に答える