2

単一の名前付きパイプに書き込む複数のプロセス (および一部のプロセス内の複数のスレッド) があります。パイプはO_WRONLYライターごとに開かれます。

このパイプから読み取る別のプロセスがあり、 でブロックしていselectます。O_RDONLY | O_NONBLOCKパイプはリーダーで開きます。

selectリーダーでウェイクアップすると、利用read可能なデータのチャンクが最大で 1 つ返されますか、それとも複数のチャンクが返される可能性がありますか? 前者の場合、最初のチャンクを読み取った後select、残りのチャンクの読み取りが完了するまですぐに起動します。

それともread、ライターによって書き込まれたチャンクの 1 つ未満を返す可能性がありますか?

私は文字列を読み書きしていますが、それらはすべて 未満PIPE_BUFなので、書き込みがアトミックであることはわかっています。複数の文字列をチェックするために区切り記号を簡単に追加できますが、Linux でどのように機能するのか興味があります。

4

1 に答える 1

2

readwriteパイプで利用可能なすべてのデータを返します。そのデータを書き込むために使用された s の数は関係ありません。パイプにさらにデータがある場合、返されるバイト数は要求されたサイズと同じになります。このような場合、selectはすぐに戻り、読み取るデータがあることを示します。

書き込む各チャックをパイプに区切り、読み取り後に分離する必要があります。

于 2013-05-24T18:48:36.663 に答える