
パイプとストリームについて読みましたが、それがどのように実装されているのかまだよくわかりません。
プログラムが起動され、キーボードがデータを送信する「標準入力」ストリーム (stdin) からデータを読み取ります。
私の質問は、それがパイプとどう違うのかということです。 パイピングを使用すると、パイプにデータを送信するプロセスと、パイプからデータを読み取る別のプロセスを作成できます。
キーボードが押されると、データが stdin に送信され、プログラムはこの同じストリームからデータを読み取ります。
パイプと同様に、このストリームにデータが送信されるとすぐに「読み取り」操作が実行されます。
これらのストリームはパイプで送られますか?
答え1
Unixの端末I/Oは伝統的に何らかの形で実装されてきた。列古いカーネルではclistが使用されていました。V8 Unixではストリームほとんどの場合、clist とストリームは、ユーザー プロセス (具体的には、ファイル記述子) と文字デバイス ドライバー (シリアル ポートや pty など) 間のリンクの一部を実装するために使用されます。
パイプもキューですが、ユーザー プロセス (具体的には、ファイル記述子のペア) をリンクします。パイプには、ソケット、特殊なタイプのファイル、さらには STREAMS (STREAMS は V8 ストリームの派生です) など、さまざまな実装があります。
したがって、ストリームとパイプはどちらもキューの実装ですが、使用される状況は異なります。
答え2
これは技術的な観点からは完全に正確ではないかもしれませんが、混乱を解消するのに役立つかもしれません。私は、ストリームは STDIN、STDOUT、STDERR などのプログラム固有のものであると考える傾向がありますが、パイプはプログラムの外部にあります。たとえば、コマンド ではcat foo.txt | grep bar
、cat
コマンドは自身の固有の STDOUT に送信し、外部パイプはそれをgrep
の固有の STDIN に接続します。