パイプとストリームの違いは正確には何ですか?

パイプとストリームの違いは正確には何ですか?

パイプとストリームについて読みましたが、それがどのように実装されているのかまだよくわかりません。

プログラムが起動され、キーボードがデータを送信する「標準入力」ストリーム (stdin) からデータを読み取ります。

私の質問は、それがパイプとどう違うのかということです。 パイピングを使用すると、パイプにデータを送信するプロセスと、パイプからデータを読み取る別のプロセスを作成できます。

キーボードが押されると、データが stdin に送信され、プログラムはこの同じストリームからデータを読み取ります。

パイプと同様に、このストリームにデータが送信されるとすぐに「読み取り」操作が実行されます。

これらのストリームはパイプで送られますか?

答え1

Unixの端末I/Oは伝統的に何らかの形で実装されてきた。古いカーネルではclistが使用されていました。V8 Unixではストリームほとんどの場合、clist とストリームは、ユーザー プロセス (具体的には、ファイル記述子) と文字デバイス ドライバー (シリアル ポートや pty など) 間のリンクの一部を実装するために使用されます。

パイプもキューですが、ユーザー プロセス (具体的には、ファイル記述子のペア) をリンクします。パイプには、ソケット、特殊なタイプのファイル、さらには STREAMS (STREAMS は V8 ストリームの派生です) など、さまざまな実装があります。

したがって、ストリームとパイプはどちらもキューの実装ですが、使用される状況は異なります。

答え2

これは技術的な観点からは完全に正確ではないかもしれませんが、混乱を解消するのに役立つかもしれません。私は、ストリームは STDIN、STDOUT、STDERR などのプログラム固有のものであると考える傾向がありますが、パイプはプログラムの外部にあります。たとえば、コマンド ではcat foo.txt | grep barcatコマンドは自身の固有の STDOUT に送信し、外部パイプはそれをgrepの固有の STDIN に接続します。

関連情報