2 つのプログラムが名前付きパイプを介して通信する Linux の C++ プロジェクトに取り組んでいます。
あるプログラムで、他のプログラムが名前付きパイプから切断されたかどうかを検出したいと考えています。
切断を検出する方法はありますか?
編集
O_RDWR モードで fifo を開きました。これが、select が切断時に反応しなかった理由です。(O_RDONLY | O_NDELAY) で fifo を開くと、すべて正常に動作します。
2 つのプログラムが名前付きパイプを介して通信する Linux の C++ プロジェクトに取り組んでいます。
あるプログラムで、他のプログラムが名前付きパイプから切断されたかどうかを検出したいと考えています。
切断を検出する方法はありますか?
編集
O_RDWR モードで fifo を開きました。これが、select が切断時に反応しなかった理由です。(O_RDONLY | O_NDELAY) で fifo を開くと、すべて正常に動作します。
一方read
が 0 バイトで戻る場合、パイプは切断されます。
これは TCP/IP と同じです。データの読み取りを試みる必要があります。それが 0 で失敗した場合、パイプは閉じられます。
読み取りと受信:
これらの呼び出しは、受信したバイト数を返します。エラーが発生した場合は -1 を返します。 ピアが正常なシャットダウンを実行した場合、戻り値は 0 になります。
シグナルもありSIGPIPE
ます。壊れたパイプ (リーダーのないパイプ) に書き込もうとすると送信されます。