2012-02-25 4 views

答えて

8

パイプを "クリア"する方法は、バッファが空になるまでパイプを読み取ることです。これはあなたを助けません。私はあなたの本当の問題は、親が複数のクライアントから混在しているデータを読むかもしれないと推測しています。あなたの問題には2つの簡単な解決策があります。

  1. 常に未満PIPE_BUFバイト長のメッセージを書き、そしてwriteへの単一の呼び出しでこれを行います。これにより、パイプへの書き込みが確実にアトミックになります。

  2. 子プロセスごとに個別のパイプを使用します。サーバー側では、スレッドを使用するか、selectまたはpollで非ブロッキングIOを使用してください。同様に、Unixドメインソケットを使用して、各クライアントをソケットに接続させることもできます(これは実際には別々のパイプを作成する別の方法です)。

+0

ありがとうございました。 –

関連する問題