POPEN

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

popen pclose - 入出力処理  

索引

ライブラリ

Lb libc  

索引

書式

In stdio.h Ft FILE * Fn popen const char *command const char *type Ft int Fn pclose FILE *stream  

索引

解説

Fn popen 関数は、双方向パイプフォークを作成し、シェルを起動してプロセスを ``開き'' ます。 親プロセスで事前に Fn popen を呼び出して開いたストリームは、 新しい子プロセスによってクローズされます。 以前の Fn popen は単方向のパイプで実装されていたため、 Fn popen の多くの実装は、 読み書きの両方ではなく、 Fa type 引数が読込もしくは書込のどちらかを指定すること だけ許可していました。 現在の Fn popen は双方向パイプで実装しているので、 Fa type 引数で双方向データフローを要求できます。 Fa type 引数はヌル文字で終わる文字列のポインタで、 読取りの場合は `r' 、書込みの場合は `w' 、読み書きの場合は `r+' である必要があります。

Fa command 引数は、シェルコマンドラインを含む、 ヌル文字で終了する文字列のポインタです。 このコマンドは、 -c フラグで /bin/sh に渡されます。解釈がある場合、シェルで実行されます。

Fn popen の戻り値は通常の標準 入出力 とあらゆる点で同等のものです。 ただし、閉じるときは、 Fn fclose ではなく Fn pclose を使わなければなりません。 このようなストリームに書込むと、 コマンドの標準入力に書込まれます。 コマンドの標準出力は、 そのコマンド自体で変更しないかぎり、 Fn popen で呼び出したプロセスのものと同じです。 反対に、 Fn popen で ``開かれた'' ストリームからの読込みは、 コマンドの標準出力から読込まれます。 コマンドの標準入力は Fn popen を呼び出したプロセスのものと同じです。

出力 Fn popen ストリームは、デフォルトで完全にバッファ されることに注意してください。

Fn pclose 関数は、結び付けられたプロセスの終了を待機し、 Fn wait4 が戻すコマンドの終了ステータスを返します。  

索引

戻り値

Fn popen 関数は、 fork(2) か pipe(2) でエラーが発生した場合、またはメモリを割り当てられない場合は ヌル を戻します。

Fn pclose 関数は、 Fa ストリーム が Fn popen で ``開いた'' コマンドと 結び付いていなかった場合、または Fa ストリーム がすでに Fn pclose で ``閉じている'' 場合、あるいは wait4 でエラーが発生した場合は -1 を戻します。  

索引

エラー

Fn popen 関数は、信頼性のある errno を設定しません。  

索引

関連項目

sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3)  

索引

バグ

読取り用に開いたコマンドの標準入力は、 Fn popen を呼び出したプロセスとシークオフセットを共有するので、 オリジナルプロセスがバッファ読取りを実行すると、 コマンドの入力位置が予想どおりにならないことがあります。 同様に、書込み用に開いたコマンドの出力は、 オリジナルプロセスのものと混ざることがあります。後者は、 Fn popen の前に fflush(3) を呼び出すことで回避できます。

シェルを実行しないことには、それが実行できないコマンドのシェル なのか、すぐに終了してしまうコマンドか、区別できません。 終了ステータスの 127 のみがヒントになります。

Fn popen の引数は常に sh(1) を呼び出し、 csh(1) は呼び出しません。  

索引

歴史

Fn popen 関数と Fn pclose 関数は、 AT&T System v7 で登場しました。

双方向機能は、 Fx 2.2.6 で追加されました。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
バグ
歴史

jman



Time: 07:07:02 GMT, January 12, 2009