【发布时间】:2011-04-12 22:51:34
【问题描述】:
我正在尝试创建一个具有重定向输入和输出的子进程(如此处所述 - http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx)。
对于不想费心阅读该页面上的源代码的人,作者正在使用匿名管道来重定向孩子的输入和输出。父进程写入子进程的输入并从子进程的输出中读取。
然而,在该代码中,程序在读取和写入后关闭管道(在 WriteToPipe 和 ReadFromPipe 中),因此实际上程序只是读取一个文件,将其转储到子进程输入流中,然后读取子进程响应。
现在,我正在寻找的代码是我们不会关闭管道,但我们会不断发布请求并读取子进程响应(与仅发出 1 个请求相反)。
我已经尝试对上面发布的链接中给出的源代码进行多次修改,但无论我尝试什么,在 ReadFromPipe() 函数中调用 ReadFile() 时程序总是挂起(它可能等待孩子退出 - 但正如我所说,我喜欢得到孩子的回应,然后向它发送其他请求)。
关于如何克服这个问题的任何想法?
更新:
谁能告诉我使用带有RedirectStandardInput 和RedirectStandardOutput 的.NET Process 类是否是一个不错的选择?
【问题讨论】:
-
示例代码和文档似乎表明您必须关闭写句柄以防止 ReadFile() 挂起。我想我以前做过类似的事情,但那是很久以前的事了,我不记得细节了。
-
@Luke 说得对,具体来说,写句柄的所有副本都必须关闭,要么通过
CloseHandle()显式关闭,要么通过进程退出隐式关闭。