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
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- バグ
-
- 歴史
-
Time: 07:07:02 GMT, January 12, 2009