本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 2 : システムコール > p

pipe(2)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

pipe ― プロセス間チャンネルの生成

構文

int pipe(int fildes[2]);

説明

pipe() は、パイプと呼ばれる 入出力機構を生成し、2 つのファイル記述子 fildes[0] と fildes[1] を返します。 fildes[0] は読取り用にオープンされ、 fildes[1] は書込み用にオープンされるものです。

fildes[1] に書き込まれたデータは、 読取り専用ファイル記述子 fildes[0] によって 先入れ先出し (FIFO) 式にアクセスされます。 パイプの 入出力動作の詳細については、 read(2)write(2) の項を参照してください。

デフォルトでは、HP-UX パイプは、ストリームベースではありません。システム上に作成されたすべてのパイプがストリームベースになるように、カーネルを生成することは可能です。HP-UX リリース 10.0 以降でのみ、これを行うことができます。( mknod または mkfifo によって作成される) ストリームベースの FIFO は、HP-UX ではサポートされていません。

ストリームベースのパイプをサポートするカーネルを生成するには、次のように行います。

  • STREAMS/UX をインストールしなければなりません。

  • モジュール pipemod およびドライバ pipedev が、 /stand/system ファイル中に含まれていなければなりません (STREAMS/UX がインストールされたとき、 pipemod および pipedev はシステムファイルに自動的に追加されます )。

  • 調整可能なパラメータ"streampipes"が、 /stand/system ファイル中で 1 にセットされていなければなりません (これは、STREAMS/UX がインストールされたときに自動的に行われません)。

  • カーネルを生成し、システムを再ブートしなければなりません。 いったん、再ブートすると、 pipe() によって作成されたすべてのパイプは、ストリームベースになります。

詳細については、 HP 9000 リファレンスマニュアルの STREAMS/UX を参照してください。

pipe() を用いてコマンド行 ls | sort を実現する例を示します。

#include <sys/types.h> 
pid_t pid; 
int pipefd[2]; 
 
/*  Assumes file descriptor 0 and 1 are open  */ 
pipe (pipefd); 
 
if ((pid = fork()) == (pid_t)0) /* check process id of child process */ { 
     close(1);        /* close stdout */ 
     dup (pipefd[1]); /* points pipefd at file descriptor */ 
     close (pipefd[0]);  
     execlp ( ls", ls , (char *)0); /* child process does ls */" 
} 
else if (pid > (pid_t)0) { 
     close(0);        /* close stdin  */ 
     dup (pipefd[0]);  
     /* point the child's standard output to parent's standard input */ 
     close (pipefd[1]); 
     execlp ("sort", "sort", (char *)0); /* parent process does sort */ 
} 

戻り値

正常終了すると 0 を返します。 異常終了すると -1 を返し、 エラーを示す値が errno にセットされます。

エラー

pipe() は、次の条件のいずれかを満たす場合に異常終了します。

[EMFILE] 

NFILE -1 個またはそれ以上のファイル記述子がオープンされている場合

[ENFILE] 

システム ファイルテーブルがいっぱいである場合

[ENOSPC] 

ファイルシステムに十分な空間がなく、 パイプが生成できない場合

[ENOSR] 

両ストリームヘッドのリソースを割り当てることができなかった場合 (ストリームベースのパイプのみ)

参照

sh(1), read(2), write(2), popen(3S), streamio(7)

標準準拠

pipe(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.