単一の名前付きパイプに書き込む複数のプロセス (および一部のプロセス内の複数のスレッド) があります。パイプはO_WRONLY
ライターごとに開かれます。
このパイプから読み取る別のプロセスがあり、 でブロックしていselect
ます。O_RDONLY | O_NONBLOCK
パイプはリーダーで開きます。
select
リーダーでウェイクアップすると、利用read
可能なデータのチャンクが最大で 1 つ返されますか、それとも複数のチャンクが返される可能性がありますか? 前者の場合、最初のチャンクを読み取った後select
、残りのチャンクの読み取りが完了するまですぐに起動します。
それともread
、ライターによって書き込まれたチャンクの 1 つ未満を返す可能性がありますか?
私は文字列を読み書きしていますが、それらはすべて 未満PIPE_BUF
なので、書き込みがアトミックであることはわかっています。複数の文字列をチェックするために区切り記号を簡単に追加できますが、Linux でどのように機能するのか興味があります。