Win32,ReadFile从管道块,甚至在子程序终止后

前端之家收集整理的这篇文章主要介绍了Win32,ReadFile从管道块,甚至在子程序终止后前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的程序(在C中)创建两个子进程,等待每个继承的管道,并将输出放在一个文件中.

一切顺利,除了在两个管道上的一些写入/读取周期之后,当小孩结束时,调用ReadFile块,等待管道上的数据.我使用以下模式:

...
//create pipe1
CreatePipe(&hReadDup,&hWrite,&saAttr,0);
DuplicateHandle(GetCurrentProcess(),hReadDup,GetCurrentProcess(),&hRead,FALSE,DUPLICATE_SAME_ACCESS);
CloseHandle(hReadDup);


si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hWrite;   

CreateProcess(  NULL,const_cast<LPWSTR>(cmd2.c_str()),//the command to execute
        NULL,NULL,TRUE,&si,//si.
        &pi
    );

...
CloseHandle(hWrite); // EDIT: this was the operation not properly done!

while(cont){
    ...
    cont = ReadFile(hRead,buf,50,&actual,NULL);
    ...
}
...

最后一次调用(子进程退出后)阻止.
想法为什么(如果没有,怎么调试这个)?

我自己找到了解决方案(实际上是一个编码错误).
我没有正确关闭管脚的写入句柄(hWrite),所以同步的ReadFile无法回报子进程的终止.

如果有人遇到同样的问题,请确保在启动管道上的I / O操作之前关闭管道的可继承句柄(如MSDN报告,找不到).

猜你在找的Windows相关文章