0

c++ on windows 我创建了一个 cmd.exe 的子进程,但是当我读取管道时它卡住了

HANDLE parent = GetStdHandle(STD_OUTPUT_HANDLE);
char buffer[BUFSIZE];
DWORD read, written;
BOOL b = true;

for(;;)
{
    b = ReadFile(g_hChildStd_OUT_Rd, buffer, BUFSIZE, &read, NULL);
    if(! b || read == 0) break;

    b = WriteFile(parent, buffer, read, &written, NULL);
    if(! b) break;
}

它在我的控制台中打印 cmd.exe 的输出,但它挂在这个循环中。我只需要弄清楚为什么它不会打破循环

4

2 回答 2

1

当管道的写入端关闭时,您编写的代码应该退出,这发生在它的最后一个句柄关闭时。如果子进程退出,它对管道写入端的句柄将自动关闭。

您没有显示足够多的代码让我确定,但最可能的原因是您没有关闭管道写入端的句柄。如果在启动子进程后关闭句柄,您的代码应该可以工作。

于 2012-08-10T21:52:39.747 回答
0

您的循环是无限的,因为 b 始终为真,因为 ReadFile 和 WriteFile 在您的情况下始终是成功的,并且 read 永远不会为 0。

于 2012-08-10T18:54:22.950 回答