誰もがbashがパイプを介してデータを送信する方法を知っていますか?
cat file.txt | tail -20
このコマンドはfile.txtのすべての内容をバッファに出力しますか?それとも、このコマンドは、たとえば、file.txtの内容を1行ずつ印刷し、テールを処理するために各行で一時停止し、さらにデータを要求しますか?
私が尋ねる理由は、基本的に1つの操作の出力が次の操作の入力として送信されるデータの一連の操作を実行する組み込みデバイス上にプログラムを書いているからです。私はlinux(bash)がこれをどのように処理するのか知りたいので、 "cat file.txt | tail -20"を実行したときに具体的に何が起こるかではなく、一般的な答えを教えてください。
あなたの回答を事前にありがとう!
編集:Shog9は関連するWikipediaの記事を指摘しましたが、これは私に直接記事に導かれませんでしたが、それは私がこれを見つけるのを助けました: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation 私が探していた情報を持っていました。
私は自分自身を明確にしていないことを申し訳ありません。もちろん、パイプを使用しています。もちろん、コマンドのそれぞれの部分のstdinとstdoutを使用しています。私はそれが状態にはあまりにも明白だと思っていました。
私が求めているのは、これがどのように処理/実装されているかです。両方のプログラムが一度に実行できないため、stdinからstdoutにデータがどのように送信されますか?最初のプログラムが2番目のプログラムよりも大幅に高速にデータを生成する場合はどうなりますか?システムは終了するか、stdoutバッファがいっぱいになるまで最初のコマンドを実行し、次のプログラムに移動します。