创建子进程

时间:2012-08-10 18:43:01

标签: c++ windows winapi

在Windows上的

c ++ 我创建了一个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的输出,但它在此循环中挂起。 我只需要找出为什么它不会打破循环

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你的循环是无限的,因为b总是正确的,因为在你的情况下,ReadFile和WriteFile总是成功的,读取永远不会是0。