私はこの次のシナリオを持っています。
パイプを作ります。
子プロセスをフォークしました。
子はパイプの読み取り側を明示的に閉じ、パイプの書き込み側に書き込み、何も閉じずに終了します(終了は、子に代わって開いているすべてのファイル/パイプ記述子を閉じる必要があると思います)。
親はパイプの書き込み側を明示的に閉じ、 null を返す
fgets
までを使用してパイプの読み取り側から読み取ります。fgets
つまり、完全に読み取ります。
ここで私の質問は、読み取りが完了したら、親がパイプの読み取り側を明示的に閉じる必要があるのはなぜですか? 完全なデータが読み取り側から読み取られたら、システムがパイプを完全に削除するのは賢明ではありませんか?
親で明示的に読み取り終了を閉じることはありませんが、Too many file descriptors
遅かれ早かれ、さらにパイプを開くときにエラーが発生します。私の仮定では、書き込み側が閉じられ、データが読み取り側から完全に読み取られると、システムはパイプを自動的に削除するというものでした。パイプから二度カントできないから!
では、データが完全に読み取られ、書き込み終了が閉じられた後、システムがパイプを削除しない理由は何ですか?