2017-04-15 5 views
0
cat file.txt | grep hello 

私はこれを見る方法はcat file.txtが実行され、どのような標準出力に渡されるgrep helloにパイプに入力として渡されることです。 grep helloは、指定された入力にhelloと一致するすべての出現を検出します。処理パイプ

私の混乱は次のとおりです。grep helloパイプに書き戻して、親プロセスがstdoutにあるものを出力するようにしますか?またはgrep helloは返されたコンテンツをstdoutに入れますか?どのように機能するのですか?私は

+0

これはまったくCではありません。 –

+0

これをCプログラムの中でやりたいのですか、[Cシェル](https://www.cs.duke.edu/csl/docs/csh.html)のようなことについて話していますか? – tadman

+0

ああ、申し訳ありません。私は指定するのを忘れていました。私はC言語でシェルを書いています。 – daniel

答えて

2

catの標準入力のstdoutがgrepに接続されている「Cでシェルを書いていますので、

私はこの質問をしています。 grepのstdoutは、おそらく端末であるデフォルトの場所に接続されています。 grepは、その出力をcatに戻しません。パイプは単方向です。

+0

... mmm、なぜcat file1.txtの出力はcat file1.txtを実行すると表示されないのですか? file2.txt。 cat file.txtはstdoutに書き込まれず、ファイルディスクリプタであるパイプの端の1つに書き込まれるため、catのstdoutはgrepのstdinに接続していますが、どちらも同じ標準入力に接続されている。 – daniel

+0

私は上記のコメントが間違っていると思うのは、パイプが見えてから新しいプロセスが作成され、同じ標準入力を共有しないからです。私が思うには、@ John Kugelmanは、stdoutに書き込むのではなく、ファイル記述子であるパイプの端の1つと、子プロセスのstdinのFDのどちらかに書き込む"がパイプの他端のファイル記述子に設定され、grep helloが実行されます。 – daniel

関連する問題