Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pipe(2) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sh(1)

read(2)

write(2)

fork(2)

socketpair(2)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026