Cプログラムを作成したいのですが、解析する必要がありますstdin
。入力すると、cat file.txt | grep -v match
fromはどのように解析されますか?シリーズですか? 2つの異なる文字列ですか?私は走り、そこで(見かけ上)便利なものを見つけることができませんでした。stdout
cat
-v match
cat /dev/pts/0
file /dev/pts/0
ベストアンサー1
ㅏ管路読み取りおよび書き込み側に関連するファイル記述子を含むカーネルに割り当てられたバッファー。実行時cat file.txt | grep -v match
:
- シェルはパイプを生成します(
pipe()
システムコールを使用して) - シェル
fork()
S. サブプロセスはdup2()
システムコールを使用して標準出力ストリームを閉じ、パイプの書き込み端を標準出力にコピーします。 (その後、標準出力への書き込みはカーネルバッファに移動します。)その後、子プロセスは更新された標準出力を持ちexec()
ます。cat
- シェルが
fork()
再び表示されます。サブプロセスはdup2()
システムコールを使用して標準入力ストリームを閉じ、パイプの読み出し端を標準入力にコピーします。 (以降、標準入力の読み取りはカーネルバッファで行われます。)その後、サブプロセスは標準入力を更新しましたexec()
。grep
現在、および両方がcat
実行されていますgrep
。grep
標準入力(パイプ)から読み取ろうとし、パイプが空の場合、読み取りはブロックされます。cat
標準出力(再パイプ)に書き込もうとし、パイプがいっぱいになると書き込みがブロックされます。それ以外の場合は、cat
バッファに書き込むときにgrep
バッファから読み取ることができます。