Unix/Linux系 OS におけるパイプ (pipe) は,プロセス間通信に使用できる単方向のデータチャネルです.パイプの書き込み側に書き込まれたデータは,パイプの読み出し側から読み出されるまでカーネルでバッファリングされます.
パイプはシェルからコマンドの入出力として利用できますが,プログラムでも生成できます.pipe() システムコールは (匿名の) パイプを生成します. このとき,2つのファイル記述子が生成されプロセスに渡されます. パイプの配列 (pipefd) が,パイプの両端を参照する2つのファイル記述子を返すのに使用されます.pipefd[0]がパイプの読み出し側,pipefd[1]がパイプの書き込み側です.
書き込み用のパイプと読み出し用のパイプを異なるプロセスが持つことで,ストリームを共有し協調的な動作を行わせることができます.これは fork した親子関係にあるプロセス間のプロセス間通信で使われます.
パイプを使うサンプルプログラムです.親プロセスから子プロセスへの通信を行います.ソースプログラムは,pipe_test1.c です.
プログラムはコマンドとして起動するもので,仕様は以下です.
pipe_test1 string パラメータ: string : パイプに書込む文字列
プログラムは,以下の機能を実行します.
パイプを使うサンプルプログラムです.親プロセスから子プロセスが起動したコマンドの標準入力への通信を行います.ソースプログラムは,pipe_test2.c です.
プログラムはコマンドとして起動するもので,仕様は以下です.
pipe_test2 string パラメータ: string : パイプに書込む文字列
プログラムは,以下の機能を実行します. 子プロセスのパイプを標準入力に繋ぐと,親プロセスがパイプに書き込んだものを子プロセス,または子プロセスから起動したプログラムが標準入力から読み込むことができます.