通常のファイルと比較して名前付きパイプの特別な点は何ですか? [コピー]

通常のファイルと比較して名前付きパイプの特別な点は何ですか? [コピー]

インポート:

  • ターミナルでは
    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

両方のシナリオの唯一の違いは次のとおりです。

  1. 同様のことをするために他のコマンドを使用するのと同じように、他のことを知らずに「ファイル」を生成しますtouchmkfifo
  2. 最も重要なのは、echo読み取り操作が返されるまでパイプが返されないことです。

私は2が通常のファイルと比較して名前付きパイプを特別にするものだと思います。

しかし、名前付きパイプの特別な点は何ですか?

プロセス間通信に使用されるという内容を読みましたが、プロセスも通常のファイルのみ使用できると思います。しかし、もしそうなら、パイプは存在しないので、私が間違っていたでしょう。


私を完全に混乱させる非常に簡単な例は次のとおりです。

ターミナルにいたら

mkfifo mypipe
while true; do date > mypipe ; done

パイプに書き込みを続けていますが(わかっている限り上書き)、パイプから一度読み込むと予想よりも多くの出力が生成されます。

cat myfifo

同じ日付を複数回印刷します。通常4回、時には5~6回印刷します。

関連情報