я создал две трубы счтения вывода дочернего процесса в то время как он жив
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;
}
Q: Но где я должен поместить код для чтения выход ребенка?
Почему я не могу читать cout и printf с этими трубами?
Спасибо вам за право – Yola