ノンブロッキング匿名パイプ(O_NONBLOCK
フラグ)から読み取るPOSIXスレッドがあります。スレッドが停止しているとき(例えばエラーのために)、パイプ内に(内部バッファ内に)何かが残っているかどうかチェックしたい。パイプにデータがある場合、新しいスレッドはパイプからの読み取りを続けることができるように、同じ読み取りディスクリプタ(スレッド間で共有される)を持つ新しいスレッドを実行します。パイプが空の場合はパイプを閉じ、何もしないでください。ノンブロッキング匿名パイプにデータを削除せずにチェックする方法
パイプからデータを削除せずにパイプが空であるかどうかを確認する必要があります(通常の場合はread
となります)。それを行う方法はありますか?
P.S.私はread(int fd, void *buf, size_t count);
でcount = 0
を設定することが役立つかもしれないと思うが、それは未定義の動作のいくつかの種類であるドキュメント・サイス:カウントがゼロの場合
、(読み)は、以下のエラーを検出することができます。 にエラーがないか、またはread()でエラーがチェックされない場合は、0のカウントを持つ read()が0を返し、それ以外の効果はありません。
Nitpick:ゼロ・サイズのドキュメントを読み込む_implementation-defined_を説明し、定義されていない、動作。未定義の振る舞いは、具体的には、*任意の*結果が正しいことを意味します。私のC教授は、「未定義の動作とは、コンピュータが火を奪うのが技術的に有効である」ということでした。 :) –
また、これは重複しているはずです(前に尋ねられていないとは想像できません)が、良い一致を見つけることはできません。 Hm。 –
@SnildDolkow私は尋ねる前に深く検索しました。 –