Windows:具有重定向输入和输出的子进程

前端之家收集整理的这篇文章主要介绍了Windows:具有重定向输入和输出的子进程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用重定向输入和输出创建子进程(如此处所述 – http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx).

For the people that don’t want to bother reading the source code on that page,the author is using anonymous pipes to redirect the child’s input and output. The parent process writes to the child process’s input and reads from the child process’s output.

然而,在该代码中,程序在读取和写入之后(在WriteToPipe和ReadFromPipe中)关闭管道,因此实际上程序只读取文件,将其转储到子进程输入流上,然后读取子进程响应.

现在,我正在寻找的代码是我们不会关闭管道的代码,但是我们会不断发布请求并读取子进程响应(与仅发出1个请求相反).

我已尝试对上面发布的链接上给出的源代码进行了几处修改,但无论我尝试什么,程序总是在ReadFromPipe()函数调用ReadFile()时挂起(它可能等待孩子退出 – 但是正如我所说,我希望得到孩子的回应,然后向其发送其他请求).

关于我如何克服这一点的任何想法?

更新:

任何人至少可以告诉我,使用带有RedirectStandardInput和RedirectStandardOutput的.NET Process类是一个不错的选择吗?

解决方法

有完全相同的问题,并通过使用PeekNamedPipe(根据MSDN也适用于匿名读取管道)解决它,以在每次调用ReadFile之前检查可用数据.这消除了我遇到的阻塞问题,并允许我的GetExitCodeProcess()看到进程退出并清理管道.

猜你在找的Windows相关文章