fprintf vs WriteFile写入管道:无法读取所有管道

时间:2013-08-29 20:05:39

标签: winapi file-io printf pipe

我正在尝试运行一个控制台应用程序并读取/写入它的标准i / o。问题是,当这个应用程序通过WriteFile(GetStdHandle(...))写入输出时,我成功地在管道上读取了它的ReadFile输入。

当目标应用程序使用fprintf时,ReadFile会阻塞,直到目标应用程序退出,在这种情况下,它会立即返回整个输出。当目标应用程序阻塞时(例如,通过fgets()),然后ReadFile阻止。

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

为什么这种奇怪的行为以及如何绕过它?

1 个答案:

答案 0 :(得分:1)

可能是由于fprintf被缓冲而WriteFile没有被缓冲。你可以在fprintf之后使用fflush并试试吗?