FILE何时刷新?

anh*_*ppe 10 c c++ windows libc fflush

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

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

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

Dev*_*lar 13

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

如果没有完全缓冲,则可以对行进行行缓冲,即在'\n'写入(或缓冲区已满,如果您的行非常长)或无缓冲时将刷新它.

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

什么构成"交互设备"是实现定义的.(第5.1.2.3章"程序执行",第6节.)

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

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