FILE何时刷新?

时间:2013-04-23 07:08:06

标签: c++ c windows libc fflush

我在Windows下有一个很好的旧C FILE文件描述符,输出流使用它来写入数据。我的问题很简单,但我找不到答案:

假设我没有调用fflush,内容何时刷新到光盘?

流不断接收数据,似乎内容经常被刷新,但刷新内容的规则是什么?

1 个答案:

答案 0 :(得分:13)

如果库实现可以确定输出流不引用交互设备(并且那么),则流将被完全缓冲,即它将在缓冲区刷新(默认情况下) BUFSIZ大小)已满。

如果没有完全缓冲,则可以对行进行行缓冲,即在写入'\n'时刷新它(或者缓冲区已满,如果你的行真的长) ,或无缓冲。

(ISO / IEC 9899:1999,第7.19.5.3章和第34章; fopen()功能",第7段。手头没有更新版本的标准,但AFAIK这没有改变。)

什么构成了一个"互动设备"是实现定义的。 (第5.1.2.3章"程序执行",第6段。)

一般的想法是文件输出应该是完全缓冲的,而终端输出是行缓冲的(或者是无缓冲的,正如Jesse Good正确指出的那样)。

缓冲策略和缓冲区大小都可以通过setvbuf()进行更改。请注意,任何此类更改必须在开始访问流之前发生,一旦您考虑它就会显而易见。