PIPE(2) — NEWS-OS Programmer’s Manual
名称
pipe − プロセス間の通信チャンネルを作成する
形式
pipe(fildes)
int fildes[2];
解説
pipe システムコールは、 パイプと呼ばれる 1 つの入出力メカニズムを 作成します。 返されたファイルディスクリプタは、 リードおよびライトオペレーションで使用することができます。 ディスクリプタ fildes[1] を 使用してパイプが書き込まれるときには、 その書き込みを 行うプロセスがサスペンドされるまでに、 4096 バイトまでのデータがバッファされます。 ディスクリプタ fildes[0] を 使用して読み取ることにより、 そのデータを 取り込むことができます。
パイプがセットアップされたあとには、 2 つ (またはそれ以上) の連係して働くプロセス (そのあとの fork コールで作られたもの) が、 read および write コールを 使用し、 そのパイプを 介してデータの受け渡しを することが前提となります。
シェルには、 複数のパイプによって接続される一次配列のプロセスを セットアップするための構文があります。
一方向しかない (すべての書き込みファイルディスクリプタが クローズされている) 空の (データがバッファされていない) パイプに 対する read コールは、end-of-file を 返します。
パイプは、 実際には socketpair(2) コールの特殊なケースであり、 システム内ではそのように実現されています。
一方向しかないパイプに対して書き込みが試みられると、 シグナルが生成されます。
リターン値
パイプが作成されると、 関数値 0 が返されます。 エラーが発生した場合には、 −1 が返されます。
エラー
次の場合、 pipe コールは失敗します。
[EMFILE] アクティブなディスクリプタが多すぎる。
[ENFILE] システムファイルテーブルがいっぱいである。
[EFAULT] fildes バッファが、 そのプロセスのアドレススペースの有効な領域にはない。
関連事項
sh(1), read(2), write(2), fork(2), socketpair(2)
バグ
いくつかのプロセスがループ状になっている間のパイプには、 4096 バイト以上バッファが必要とされるので、 デッドロックが発生することもあります。
NEWS-OSRelease 4.2.1R