インポート:
- ターミナルでは
touch myfile echo some text >> myfile # returns straight away
- 他の端末では
cat myfile # prints "some text"
- 今私はできます
rm myfile
今これ:
- ターミナルから
mkfifo mypipe echo some text > mypipe # does not return yet
- 他の端末で
cat mypipe # prints "some text"
echo
最初のターミナルに戻る- 今私はできます
rm myfifo
両方のシナリオの唯一の違いは次のとおりです。
- 同様のことをするために他のコマンドを使用するのと同じように、他のことを知らずに「ファイル」を生成します
touch
。mkfifo
- 最も重要なのは、
echo
読み取り操作が返されるまでパイプが返されないことです。
私は2が通常のファイルと比較して名前付きパイプを特別にするものだと思います。
しかし、名前付きパイプの特別な点は何ですか?
プロセス間通信に使用されるという内容を読みましたが、プロセスも通常のファイルのみ使用できると思います。しかし、もしそうなら、パイプは存在しないので、私が間違っていたでしょう。
私を完全に混乱させる非常に簡単な例は次のとおりです。
ターミナルにいたら
mkfifo mypipe
while true; do date > mypipe ; done
パイプに書き込みを続けていますが(わかっている限り上書き)、パイプから一度読み込むと予想よりも多くの出力が生成されます。
cat myfifo
同じ日付を複数回印刷します。通常4回、時には5~6回印刷します。