0

2 つのプログラムが名前付きパイプを介して通信する Linux の C++ プロジェクトに取り組んでいます。

あるプログラムで、他のプログラムが名前付きパイプから切断されたかどうかを検出したいと考えています。

切断を検出する方法はありますか?

編集

O_RDWR モードで fifo を開きました。これが、select が切断時に反応しなかった理由です。(O_RDONLY | O_NDELAY) で fifo を開くと、すべて正常に動作します。

4

2 に答える 2

1

一方readが 0 バイトで戻る場合、パイプは切断されます。

于 2013-01-08T19:40:56.037 に答える
1

これは TCP/IP と同じです。データの読み取りを試みる必要があります。それが 0 で失敗した場合、パイプは閉じられます。

読み取りと受信:

これらの呼び出しは、受信したバイト数を返します。エラーが発生した場合は -1 を返します。 ピアが正常なシャットダウンを実行した場合、戻り値は 0 になります

シグナルもありSIGPIPEます。壊れたパイプ (リーダーのないパイプ) に書き込もうとすると送信されます。

于 2013-01-08T20:16:10.067 に答える