bashがパイプを介してデータを送信する方法を知っている人はいますか?
cat file.txt | tail -20
このコマンドは、file.txt のすべての内容をバッファーに出力し、それを末尾で読み取りますか? それとも、このコマンドは、たとえば、file.txt の内容を 1 行ずつ出力し、各行で処理を停止して末尾を処理し、さらにデータを要求しますか?
私が尋ねる理由は、基本的にデータのチャンクに対して一連の操作を実行する組み込みデバイスでプログラムを作成しているためです。1 つの操作の出力は次の操作の入力として送信されます。Linux(bash)がこれをどのように処理するかを知りたいので、「cat file.txt | tail -20」を実行するとどうなるかではなく、一般的な回答をお願いします。
編集: Shog9 は、関連するウィキペディアの記事を指摘しました。これは記事に直接つながることはありませんでしたが、これを見つけるのに役立ちました: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation探していた情報。
はっきり言ってなくてすみません。もちろん、パイプを使用しています。もちろん、コマンドのそれぞれの部分の stdin と stdout を使用しています。私は、それは明白すぎて明言できないと思っていました。
私が求めているのは、これがどのように処理/実装されるかです。両方のプログラムを同時に実行することはできないため、データは標準入力から標準出力にどのように送信されますか? 最初のプログラムが 2 番目のプログラムよりもはるかに高速にデータを生成するとどうなりますか? システムは、最初のコマンドが終了するか、stdout バッファーがいっぱいになるまで最初のコマンドを実行し、次のプログラムに移動するか、処理するデータがなくなるか、より複雑なメカニズムが存在するかをループします。 ?