パイプとストリームについて読みましたが、実装方法はまだ混乱しています。
プログラムは、キーボードがデータを送信する「標準入力」ストリーム(stdin)からデータを開始して読み取ります。
私の質問はパイプとどう違うのですか?パイプを使用すると、あるプロセスがパイプにデータを送信し、別のプロセスがパイプからデータを読み取ることができます。
キーボードを押すと、データが標準入力に転送され、プログラムは同じストリームからデータを読み込みます。
データがストリームに送信されると、パイプのように「読み取り」操作が実行されます。
このストリームはパイプで接続されていますか?
答え1
UnixターミナルI / Oは伝統的に一種のI / Oとして実装されていました。待ち行列。以前のカーネルはclistを使用します。 V8 Unixの使用小川。ほとんどの場合、clistとストリームは、ユーザープロセス(特にファイル記述子)とキャラクタデバイスドライバ(シリアルポートやptysなど)間の部分リンクを実装するために使用されます。
パイプもキューですが、ユーザープロセス(特にファイル記述子のペア)を接続します。パイプは、ソケット、特殊タイプのファイル、さらにはSTREAMS(STREAMSはV8ストリームの派生物)など、さまざまな方法で実装できます。
したがって、ストリームとパイプはどちらもキューの実装ですが、使い方が異なります。
答え2
これは技術的な観点から完全に正確ではないかもしれませんが、混乱を解決するのに役立ちます。私は、ストリームをSTDIN、STDOUT、STDERRなどのプログラムに組み込まれていると思う傾向がありますが、パイプはプログラムの外にあります。たとえばcat foo.txt | grep bar
、コマンドでは、コマンドはcat
プライマリSTDOUTに送信され、外部パイプを介してgrep
プライマリSTDINに接続されます。