即时重定向程序输出到文件而不从批处理文件缓冲

时间:2013-09-04 11:02:16

标签: c batch-file stdout

我有C程序,其中使用printf命令打印消息。从批处理文件中我用

调用我的程序
call myProgram.exe parms > myFile.txt

我需要在myFile打印邮件时每次(或几乎每次)更新myProgram。现在,在程序完成执行之前,我无法看到任何文件,可能是因为有些缓冲。我的C程序,我的batch file或操作系统是否存在此缓冲问题,我该如何解决?

1 个答案:

答案 0 :(得分:1)

stdio.h函数正在缓冲。见setvbuf。缓冲可能是特定于操作系统的,并且可能在重定向时发生变化(例如,因为内部isatty(3)可以在printf等内部使用...)。

请注意,这种缓冲实际上很有用,并且通常会大大加快输出速度。

最简单的方法是不时致电fflush(3)。否则,请setvbuf上的_IOFBFstdout联系。

在程序开头附近使用setvbuf更简单。但是,在适当位置调用fflush可能会更有效(因为使用更大的缓冲区应该更快)。