コマンドとコマンドの間にパイプ('|')を入れることで、最初のコマンドから、次のコマンドに結果を渡すことができる。
pipeシステムコールはこのパイプを扱うものだが、pipeでなくてもコマンドを受け取ることはできる。
コマンドを受け渡していくパイプのつながりをパイプラインという。
最初のコマンドとなるsrcプログラムのsrc.cは、
ただ、"ABCDE"を出力するだけ。
受け取るコマンドとなるdestプログラムのdest.cは、
fgetsで標準入力stdinからsrcコマンドの結果を受け取る。
受け取った結果をbufに格納し、出力。
$ vi src.c $ gcc src.c -o src $ vi dest.c $ gcc dest.c -o dest $ ls dest dest.c src src.c $ ./src ABCDE $ ./dest abc -----dest start----- abc -----dest end----- $ ./src | ./dest -----dest start----- ABCDE -----dest end----- $
srcだけ実行すると、"ABCDE"を出力。
destだけ実行すると、入力待ちになるので"abc"を入力、すると"dest start"と"dest end"の間に"abc"が出力される。
srcとdestの間にパイプ('|')を入れると、srcの標準出力"ABCDE"が標準入力としてdestに渡されるので、"dest start"と"dest end"の間に"ABCDE"が出力される。
Sample/c/pipeline/pipeline/src/pipeline at master · bg1bgst333/Sample · GitHub