pipe(2)

PIPE(2)

#include <unistd.h>
int pipe(int pipefd[2]);

pipe(2) はパイプを生成する。 パイプは、プロセス間通信に使用できる単方向のデータチャネルである。 配列 pipefd は、パイプの両端を参照する二つのファイルディスクリプタを 返すのに使用される。 pipefd[0] がパイプの読み出し側、 pipefd[1] がパイプの書き込み側である。 パイプの書き込み側に書き込まれたデータは、 パイプの読み出し側から読み出されるまでカーネルでバッファリングされる。

file descriptorを調べる

[vagrant@localhost tmp]$ ls -la /proc/2233/fd
dr-x------ 2 vagrant vagrant  0  2月  3 01:25 2014 .
dr-xr-xr-x 7 vagrant vagrant  0  2月  3 01:25 2014 ..
lrwx------ 1 vagrant vagrant 64  2月  3 01:25 2014 0 -> /dev/pts/1
lrwx------ 1 vagrant vagrant 64  2月  3 01:25 2014 1 -> /dev/pts/1
lrwx------ 1 vagrant vagrant 64  2月  3 01:25 2014 2 -> /dev/pts/1
lr-x------ 1 vagrant vagrant 64  2月  3 01:25 2014 3 -> pipe:[31542]
l-wx------ 1 vagrant vagrant 64  2月  3 01:25 2014 4 -> pipe:[31542]

ファイルディスクリプタの3と4が新たに生成され、pipeであることが確認できる。

子プロセスから親プロセスにデータを渡す