パイプライン

コマンドとコマンドの間にパイプ('|')を入れることで、最初のコマンドから、次のコマンドに結果を渡すことができる。
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