使用CreateProcess()

时间:2017-10-19 19:15:54

标签: c redirect winapi process pipe

在Windows中,您可以使用匿名管道创建具有重定向I / O的子进程,如下所述:Creating a Child Process with Redirected Input and Output MSDN

但是,当Stdout被重定向到像管道这样的非交互式设备时,它会自动设置为缓冲模式。这造成了毁灭性的I / O情况。也就是说,我没有得到Stdout的数据,直到它被手动刷新,或者程序终止。我认为,这个问题的唯一优雅解决方案是在创建子进程时禁用标准I / O缓冲。[CreateProcess()]

问题是我该怎么办?任何带代码的例子都将非常感激。 (注意:我在互联网上搜索过,但我甚至无法接近解决方案。)谢谢!

编辑:实际问题是,在win32 API中如何在使用CreateProcess()创建子进程之前禁用标准I / O缓冲?

编辑-2:我想我发现这个问题非常糟糕。当文件描述符不是'TTY'(终端/控制台设备)时,Stdout只有全缓冲区,如果我能以某种方式使我的管道成为伪TTY,那么问题就会得到解决。那么,问题是如何在Windows中将管道设置/设置为伪TTY?我在互联网上找不到任何解决方案。

0 个答案:

没有答案