_popen、_wpopen

パイプを作成してコマンドを実行します。

FILE *_popen(
   const char *command,
   const char *mode 
);
FILE *_wpopen(
   const wchar_t *command,
   const wchar_t *mode 
);

パラメーター

  • コマンド
    実行するコマンド。

  • モード
    返されるストリームのモード。

戻り値

作成されたパイプの一端に結合されたストリームを返します。 パイプのもう一方の終端は、実行するコマンドの標準入力ストリームまたは標準出力ストリームに結合されます。 エラーが発生した場合は、NULL を返します。 command または mode が null ポインターの場合、または mode が有効なモードではない場合、errnoEINVAL に設定されます。 有効なモードについては、「解説」を参照してください。

エラー コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。

解説

_popen 関数は、パイプを作成し、command 文字列で指定されているコマンド プロセッサのコピーを非同期に実行します。 mode 文字列には、必要なアクセス モードを次の文字で指定します。

  • 「r」
    呼び出しプロセスは、返されたストリームを使用して、呼び出されたコマンドの標準出力を読み取ることができます。

  • 「w」
    呼び出しプロセスは、返されたストリームを使用して、呼び出されたコマンドの標準入力に書き込むことができます。

  • 「b」
    バイナリ モードで開きます。

  • "t"
    テキスト モードで開きます。

    注意

    _popen 関数を Windows プログラムで使用すると無効なファイル ポインターを返すため、プログラムが無期限に応答を停止する原因になります。 _popen は、コンソール アプリケーションでは正しく動作します。 入出力をリダイレクトする Windows アプリケーションの作成方法については、Windows SDK の「Creating a Child Process with Redirected Input and Output」を参照してください。

_wpopen_popen のワイド文字バージョンであり、_wpopen 関数の引数 path は、ワイド文字列です。 それ以外では、_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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

プロセス制御と環境制御

_pclose

_pipe