执行一个进程并在VC ++中返回其标准输出

时间:2009-07-26 12:20:50

标签: c++ windows visual-c++ process stdout

执行进程最简单的方法是什么,等待它完成,然后将其标准输出作为字符串返回?

有点像Perl中的支持者。

不寻找跨平台的东西。我只需要最快的VC ++解决方案。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

WinAPI解决方案:

您必须使用重定向输入(STARTUPINFO结构中的hStdInput字段)和输出(hStdOutput)创建进程(请参阅CreateProcess)到您的管道(请参阅CreatePipe),然后只需从管道读取(请参阅ReadFile)。

答案 1 :(得分:2)

嗯.. MSDN以此为例:

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 ++的优点包装它。