2013-08-29 121 views
0

我试图运行控制台应用程序并读/写它的标准I/O。问题是,当这个应用程序通过WriteFile(GetStdHandle(...))写入输出时,我用管道上的ReadFile成功读取了它的输入。fprintf vs WriteFile写入管道:无法从所有管道读取

当目标应用程序使用fprintf时,ReadFile会阻止,直到目标应用程序退出,在这种情况下,它会一次返回整个输出。当目标应用程序阻塞(比如说,通过fgets())时,ReadFile块。

我正在使用标准管道重定向:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx

为什么这种奇怪的行为,我如何解决它?

+0

Dup of http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin –

回答

1

这可能是由于fprintf被缓冲,而WriteFile不是。你可以在fprintf之后使用fflush并尝试使用它吗?

+0

I可以,但那些不使用fflush的应用程序呢? 我应该如何处理? – Michael

+1

在这种情况下,什么都不能做。事实上,你不能保证单独的应用程序(没有管道)将打印任何东西,直到它退出。因此,行为与重定向到管道或打印到标准输出没有多大区别。 – user1952500