_popen、_wpopen
パイプを作成し、コマンドを実行します。
重要 |
---|
この API は、Windows のランタイムで実行するアプリケーションで使用することはできません。詳細については、でサポート /ZW CRT 関数" "を参照してください。 |
FILE *_popen( const char *command, const char *mode ); FILE *_wpopen( const wchar_t *command, const wchar_t *mode );
パラメーター
コマンド
実行するコマンド。mode
返されるストリーム モード。
戻り値
作成されたパイプの 1 種類の末尾に関連付けられているストリームを返します。パイプの他の末尾が起動されたコマンドの標準入力または標準出力に関連付けられます。エラー関数の戻り値の [NULL]。無効なパラメーター エラーがある場合は、モード モードが有効なモードではありませんが、errno のような コマンド または モードが null ポインターの場合 EINVALに設定されます。有効なモードについては、"解説"を参照してください。
エラー コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
_popen 関数はパイプを作成し、非同期的に指定の文字列の コマンドでコマンド プロセッサの子のコピーを実装します。文字列 モードでは、要求するアクセスの種類を次のように指定します。
"r"
呼び出しプロセスは、返されるストリームを使用して起動されたコマンドの標準出力を読み取ることができます。"w"
呼び出しプロセスは、返されるストリームを使用して起動されたコマンドの標準入力に記述できます。"b"
バイナリ モードで開きます。"t"
テキスト モードで開きます。[!メモ]
誤って使用すると Windows プログラムで、_popen 関数は、プログラムがいつまでも応答を停止します無効なファイル ポインターを返します。_popen は、コンソール アプリケーションで正しく動作します。リダイレクト ターゲットは、Windows SDKの リダイレクトされた入出力で、子プロセスの作成 を表示する Windows アプリケーションを作成します。
_wpopen は _popenのワイド文字バージョンです; _wpopen への パスの 引数はワイド文字列です。それ以外では、_wpopen と _popen の動作は同じです。
汎用テキスト ルーチンのマップ
Tchar.h のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> または <wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
使用例
// crt_popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char psBuffer[128];
FILE *pPipe;
/* Run DIR so that it writes its output to a pipe. Open this
* pipe with read text attribute so that we can read it
* like a text file.
*/
if( (pPipe = _popen( "dir *.c /on /p", "rt" )) == NULL )
exit( 1 );
/* Read pipe until end of file, or an error occurs. */
while(fgets(psBuffer, 128, pPipe))
{
printf(psBuffer);
}
/* Close pipe and print return value of pPipe. */
if (feof( pPipe))
{
printf( "\nProcess returned %d\n", _pclose( pPipe ) );
}
else
{
printf( "Error: Failed to read the pipe to the end.\n");
}
}
出力例
この出力は、.c ファイル名拡張子を持つ現在のディレクトリに 1 個のファイルがあると仮定しています。
Volume in drive C is CDRIVE
Volume Serial Number is 0E17-1702
Directory of D:\proj\console\test1
07/17/98 07:26p 780 popen.c
1 File(s) 780 bytes
86,597,632 bytes free
Process returned 0
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。