私は以下のシナリオを持っています。書き込み終了が既に終了しているパイプの読み出し側を明示的に閉じる必要がありますか?
私はパイプを作成します。
子プロセスをフォークします。
子供は明示的にパイプの終わりを読み、(出口が子供に代わって、開いているすべてのファイル/パイプ記述子を閉じる必要があります、私は推測)何を閉じることなく、パイプと出口の書き込み終了に書き込む閉じます。
親が明示的パイプの書き込み側を閉じ、NULL
fgets
fgets
までのリターンを使用してパイプの読み出し側から読み込みます。つまり、完全に読み取ります。
私の質問は、親がパイプの読み込み終了を明示的に終了する必要があることです。完全なデータが読み終わりから読み込まれると、システムがパイプを完全に削除するのは賢明ではありませんか?
私は親の明示的に読んだ終わりを閉じます。パイプをさらに開いているうちに遅かれ早かれ、エラーToo many file descriptors
があります。私の仮定は、書き込み終了が閉じられ、データが読み取り終了から完全に読み込まれると、システムがパイプを自動的に削除するということでした。あなたがパイプから2回傾けることはできません!
データが完全に読み込まれ、書き込みが終了したら、システムの背後にある論理的根拠はどうしてパイプを削除しないのでしょうか?
「パイプから2回傾けることはできません!」 –
@KerrekSB私が言ったことは、同じパイプを2回読むことができましたが、2回目のEOFが正しく表示されることでしょうか? –