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的输出,但它在此循环中挂起。 我只需要找出为什么它不会打破循环
答案 0 :(得分:1)
当管道的写入端关闭时,写入的代码应该退出,这在它的最后一个句柄关闭时发生。如果子进程退出,它对管道写入端的句柄将自动关闭。
您没有向我展示足够的代码以确定,但最可能的原因是您尚未关闭管道写入端的句柄。如果在启动子进程后关闭句柄,则代码应该可以正常工作。
答案 1 :(得分:0)
你的循环是无限的,因为b总是正确的,因为在你的情况下,ReadFile和WriteFile总是成功的,读取永远不会是0。