加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:39:22 所属栏目: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 red
我正在尝试使用重定向输入和输出创建子进程(如此处所述 – 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()看到进程退出并清理管道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读