_popen, _wpopen
stdio.h:インデックス への移動
ヘッダーファイル
stdio.h
カテゴリ
入出力ルーチン
プロトタイプ
FILE *_popen (const char *command, const char *mode);
FILE *_wpopen (const wchar_t *command, const wchar_t *mode);
説明
コマンドプロセッサパイプを作成します。
_popen 関数は,コマンドプロセッサへのパイプを作成します。コマンドプロセッサが非同期に実行され,command でコマンドラインが渡されます。mode 文字列は,コマンドプロセッサの標準入力と標準出力のどちらにパイプを関連付けるかと,バイナリモードとテキストモードのどちらでパイプを開くかを指定します。
mode 文字列は,次のいずれかの値になります。
rt | 子コマンドの標準出力(テキスト)を読み取ります。 | rb | 子コマンドの標準出力(バイナリ)を読み取ります。 | wt | 子コマンドの標準入力(テキスト)に書き込みます。 | wb | 子コマンドの標準入力(バイナリ)に書き込みます。 |
---|
最後の t または b はオプションです。指定しない場合,変換モードは外部変数 _fmode によって決定されます。
パイプを閉じ,コマンドの戻りコードを取得するには,_pclose 関数を使用します。
戻り値
成功した場合,_popen は FILE ポインタを返します。この FILE ポインタを使用して,mode 文字列にしたがい,コマンドの標準出力の読み取りまたはコマンドの標準入力への書き込みを行うことができます。
エラーが発生した場合は,NULL を返します。
例
/* このプログラムは,子プロセスを起動して dir コマンドを実行し,
パイプを使って子から親にディレクトリリストを渡します
*/
#include <stdio.h> // popen() pclose() feof() fgets() puts()
#include <string.h> // strlen()
int main( )
{
FILE* handle; // パイプの一方の端のハンドル
char message[256]; // パイプを使って渡すテキストのバッファ
int status; // 関数の戻り値
// 「DIR」を実行するプロセスからテキストを受け取るパイプを開きます
handle = _popen("dir /b", "rt");
if (handle == NULL)
{
perror("_popen error");
}
// 子プロセスから受け取った入力を読み取り,表示します
while (fgets(message, sizeof(message), handle))
{
fprintf(stdout, message);
}
// パイプを閉じ,戻りステータスを確認します
status = _pclose(handle);
if (status == -1)
{
perror("_pclose error");
}
return(0);
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
_popen |
+ |
|||
_wpopen |
NT のみ |