【发布时间】:2014-01-17 14:49:11
【问题描述】:
我用
创建了两个管道saAttr.bInheritHandle = TRUE;
...
CreatePipe(&childStdOut_Rd, &childStdOut_Wr, &saAttr, 0);
CreatePipe(&childStdErr_Rd, &childStdErr_Wr, &saAttr, 0);
然后我用下一个 STARTUPINFO 创建了子进程:
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_MINIMIZE;
si.hStdError = childStdErr_Wr;
si.hStdOutput = childStdOut_Wr;
si.hStdInput = INVALID_HANDLE_VALUE;
si.dwFlags |= STARTF_USESTDHANDLES;
然后关闭父进程中的写句柄: CloseHandle(childStdErr_Wr); CloseHandle(childStdOut_Wr);
我等待子进程完成
WaitForSingleObject(pi.hProcess, INFINITE);
当我在 MSDN 上阅读时,我可以读取 chil 进程的标准输出:
for (;;)
{
BOOL bSuccess = ReadFile(childStdOut_Rd, chBuf, bufsize, &dwRead, NULL);
if(!bSuccess || dwRead == 0) break;
bSuccess = WriteFile(hParentStdOut, chBuf, dwRead, &dwWritten, NULL);
if (!bSuccess) break;
}
问:但是我必须把代码放在哪里才能读取孩子的输出?
为什么我不能用这些管道读取 cout 和 printf?
【问题讨论】:
标签: c++ stdout stdin io-redirection createprocess