Win32,ReadFile从管道块,甚至在子程序终止后
发布时间:2020-12-14 04:34:50 所属栏目:Windows 来源:网络整理
导读:我有一个简单的程序(在C中)创建两个子进程,等待每个继承的管道,并将输出放在一个文件中. 一切顺利,除了在两个管道上的一些写入/读取周期之后,当小孩结束时,调用ReadFile块,等待管道上的数据.我使用以下模式: ...//create pipe1CreatePipe(hReadDup,hWrite,s
我有一个简单的程序(在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报告,找不到). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – Windows Azure Web角色缓存(预览)“挂起”使模拟器
- wpf – 使用Grid作为模板的ItemsControl:将控件添加到Grid
- winforms – Windows 10上的Windows窗体应用程序无法正确扩
- .net – 您是否在GAC中安装域DLL?
- Windows -1252不支持编码名称. C#
- 当驱动器作为“通用”设备呈现时,如何监控Windows中的SSD磨
- windows-7 – 错误0x80070643:无法安装MSI包
- windows – 安全地从批处理文件中删除USB?
- 如何永久设置Windows环境变量?
- windows – 配置SCCM,以便可以从分发点下载文件名中带有加号
推荐文章
站长推荐
热点阅读