0

我试图编写一个测试应用程序来从第三个控制台应用程序的标准输出中捕获文本。

我从许多文章中学习了使用 CreatePipe API,并且确实在控制台应用程序运行完成后获得了文本。

我试图让控制台应用程序继续打印超过 60 秒的内容,而 ReadFile 函数在这 60 秒内根本没有返回。

出于同样的目的,我尝试了 popen 和 fread,除了 popen 创建的黑色控制台窗口之外,一切都很好。

尽管 ReadFileEx 和一些关于重叠 I/O 的东西似乎能够解决这个问题,但实际上并非如此。

因为 ReadFileEx 需要创建文件句柄以支持重叠,而这始终是不可能的,因为文件句柄是由第三个控制台应用程序创建的。除非我们自己开发控制台应用程序,否则它将无法控制。

那么有什么方法可以通过 CreatePipe 从生命周期很长的第三个控制台应用程序中捕获标准输出?

提前致谢!

4

1 回答 1

0

我终于发现问题是第三个控制台应用程序“MAC.EXE”在每次进度输出后都没有调用“fflush”......

我在 mac.exe 的源代码中手动附加了 fflush 操作,问题得到解决。

所以一个新的问题是:如果子进程在运行过程中从不调用fflush,很少打印,如何正确读取内容?

于 2016-05-26T04:05:56.050 回答