#include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
popen(), pclose():
command 引数は、シェルのコマンドラインを含むヌル終端された文字列へのポインターである。 このコマンドは -c フラグを用いて /bin/sh に渡される。 コマンドの解釈は (もし必要ならば) シェルによって行われる。
type 引数は、ヌル終端された文字列へのポインターで、 読み込みを示す文字 'r' か、書き込みを示す文字 'w' の どちらか一方を指定しなければならない。 glibc 2.9 以降では、この引数に文字 'e' を追加で指定できる。 文字 'e' を指定すると、 対応するファイルディスクリプターにおいて、 close-on-exec フラグ (FD_CLOEXEC) がセットされる。 これが役に立つ理由については、 open(2) の O_CLOEXEC フラグの説明を参照のこと。
popen() からの返り値は、通常の標準 I/O ストリームと同じであるが、 fclose(3) ではなく pclose() で閉じなくてはならないことだけが異なる。 このストリームへ書き込んだ結果はコマンドの標準入力に書き込まれる。 そして、コマンドの標準出力は、 コマンドそのものが置き換わってしまわない限り、 popen() を呼んだプロセスの標準出力と同じことになる。 逆に、 ストリームからの読み込みは、 そのコマンドの標準出力を読み込むことになる。 そして、そのコマンドの標準入力は popen() を呼んだプロセスの標準入力と同一である。
デフォルトでは、 popen() の出力ストリームは block buffered であることに注意すること。
pclose() 関数は、(パイプに) 関連づけられたプロセスが終了するのを待ち、 wait4(2) によって返されたコマンドの終了状態を返す。
pclose(): on success, returns the exit status of the command; if wait4(2) returns an error, or some other error is detected, -1 is returned.
Both functions set errno to an appropriate value in the case of an error.
pclose() が、子プロセスの状態を取得できなかった場合、 errno が ECHILD にセットされる。
インターフェース | 属性 | 値 |
popen(), pclose() | Thread safety | MT-Safe |
type に指定できる 'e' は Linux での拡張である。
シェルの実行の失敗は、 シェルがコマンドの実行に失敗したことや、 コマンドがすぐに終了してしまったことと、区別がつかない。 唯一のヒントは終了状態が 127 になることである。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]