
echo -n | ...
EOFをパイプに送りますか?つまり、
echo -n | sth
sth
標準入力からEOFを受信しますか?
答え1
ファイルまたはストリームにデータとして表示されるEOFはありません。これはファイル記述子に関連した状態にすぎません。
エコーが終了すると(すぐに)、パイプの書き込み端が閉じます。
次の読み取りsth
(以前にファイルに書き込まれたすべてのデータを読み込んだと仮定)、パイプの状態はEOFに変わり、実行された読み取りはsth
EOF条件を返します。プロセスは必要に応じて処理を続行できますが、パイプから読み取ることはできません。
答え2
はい。パイプに書き込むプログラムが書き込み側を閉じると、パイプから読み取るプログラムはパイプ内のファイルの終わりを表示します。より正確には、パイプで開かれた最後のファイル記述子が閉じられると、ファイル終了イベントが発生します。ファイル記述子を閉じる方法には、明示的なクローズとプロセスの終了が含まれます。
ここでは、1つのプロセスだけがパイプに書き込んで実行しますecho -n
。シェルに応じて-n
書き込んでラップしたり、何も書きません。プロセスが書き込みを終了して終了すると、パイプの書き込み終了が閉じるため、sth
パイプにEOFが表示されます。 (シェルが分岐せずにパイプの左側を実行することも可能です。この場合、シェルは書き込みが完了した後に明示的にパイプを閉じます。この最適化はパイプの右側には影響しません。)