【发布时间】:2010-06-24 18:45:54
【问题描述】:
我的问题与"Turn off buffering in pipe" 有关,尽管是关于 Windows 而不是 Unix。
我正在编写一个 Make 克隆并阻止并行进程破坏彼此的控制台输出,我已将输出重定向到管道(如 here 中所述),我可以在管道上进行任何我想要的过滤。不幸的是,长时间运行的进程现在缓冲它们的输出,而不是像在控制台上那样实时发送。
从查看 MSVCRT 源代码来看,根本原因似乎是 GetFileType() 用于检查标准 I/O 句柄是否附加到控制台,然后设置内部标志并最终禁用缓冲。
显然,在创建进程时,也可以通过未记录的 STARTUPINFO 结构的 lpReserved2 成员传递一个单独的可继承文件句柄和标志数组。关于我想出的唯一可行的解决方案是使用此列表,并且在为 stdout/stderr 设置标志时只是谎报设备类型。
那么……有什么理智的方法可以解决这个问题吗?
【问题讨论】:
标签: winapi process pipe console-application