pclose() - プロセスへの (からの) パイプ・ストリームのクローズ

標準

標準/拡張機能 C/C++ 依存項目

XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方

POSIX(ON)

形式

#define  _XOPEN_SOURCE
#include <stdio.h>

int pclose(FILE *stream);

機能説明

pclose() 関数は、popen() によってオープンされたストリームをクローズし、popen() で引数として指定されたコマンドが終了するのを待機してから、シェル・コマンドを実行していたプロセスの状況を戻します。しかし、呼び出しによって終了状況が pclose() に対して使用不可になった 場合には、この状況を報告するために、pclose() により errno が ECHILD に 設定され、-1 が戻されます。これは、アプリケーションが以下の関数のいずれかを呼び出した場合に発生することがあります。
  • wait()
  • waitid()
  • シェル・コマンドのプロセス ID より小さいか等しい pid 引数を 指定した waitpid()
  • 上記のいずれかを実行する他の任意の関数

いずれの場合も、pclose() は、popen() によって作成された 子プロセスが終了するまで戻りません。

シェル・コマンドを実行できない場合には、pclose() によって 戻された子の終了状況は、シェル・コマンドが exit(127) または _exit(127) を 使用して終了した場合と同様です。

pclose() 関数は、関連ストリーム用に popen() によって作成 される呼び出しプロセス以外の子の終了状況には影響を与えません。

pclose() に対する引数 stream が popen() によって 作成されたストリームを指すポインターでない場合、その終了状況は -1 に なります。

動作のスレッド化: pclose() 関数は、親プロセス内の任意の スレッドから実行できます。

戻り値

正常に実行された場合、pclose() は、シェル・コマンドの終了状況を戻します。

正常に実行されなかった場合、pclose() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
ECHILD
子プロセスの状況を取得できませんでした。

関連情報