pipe(2) FreeBSD 一般コマンドマニュアル

pipe

前のページ 上に戻る 次のページ

pipe




書式

     #include <unistd.h>

     int
     pipe(int *fildes);


解説

     pipe() 関数は双方向のデータフローを可能とするオブジェクトである pipe を作
     成し、ペアのファイル記述子を割り当てます。

     慣習により、通常は 1 番めの記述子がパイプの 読取り側として使用され、2 番
     めの記述子が 書込み側として使用されます。ですので、 fildes[1] に書込まれ
     たデータが fildes[0] に現れます (すなわち、 fildes[0] から読取れます)。こ
     れを使えば 1 つのプログラムの出力を別のプログラムに送信できます。送信側の
     標準出力をパイプの書込み側としてセットアップし、受信側の標準入力をパイプ
     の読取り側としてセットアップしてください。パイプ自体は、すべての対応する
     記述子がクローズされるまで持続します。

     一端が閉じているパイプは widowed (相手を失った) と見なされます。このよう
     なパイプに書込みをすると、書込みプロセスは SIGPIPE シグナルを受信します。
     読取り側にファイルの終了を伝える方法は、書込み側のパイプをクローズするし
     かありません。読取り側がバッファに入っているデータを使い切った後、相手を
     失ったパイプを読取ると 0 カウントが返されます。

     このパイプの実装における双方向という性質は、古いシステムと互換性がありま
     せん。ですので、パイプを一方向にしか使用しないときには、従来の方法で端点
     を使用するこの慣習に従うことをお勧めします。


戻り値

     関数 pipe() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が
     返され、グローバル変数 errno が設定されてエラーを示します。


エラー

     pipe() 呼び出しは次の場合に失敗します。

     [EMFILE]           アクティブな記述子が多すぎます。

     [ENFILE]           システムファイルテーブルが満杯です。

     [EFAULT]           fildes バッファがプロセスのアドレス空間の不正な領域に
                        あります。


関連項目

     sh(1), fork(2), read(2), socketpair(2), write(2)


歴史

     pipe() 関数は Version 3 AT&T UNIX で登場しました。

     双方向パイプははじめて AT&T System V.4 UNIX で使用されました。

FreeBSD 4.4                      June 4, 1993                      FreeBSD 4.4

ABELNET VPSサービス