我只是很好奇,应该满足哪些条件来自动刷新标准输出缓冲区。C中自动刷新标准输出缓冲区的规则是什么?
首先我很困惑,这个伪代码不会打印每一个迭代输出:
while (1) {
printf("Any text");
sleep(1);
}
但是,如果我添加换行符会的。
几个实验后,我发现,我的机器标准输出缓冲区被刷新:
- 当我把到stdout 1025个以上的字符;
- 当我阅读stdin;
- 当我把换行符放到标准输出中时;
第一个条件是完全清楚的 - 当缓冲区满了,它应该被刷新。第二个也是合理的。但为什么换行符会导致冲洗?其他的隐含条件是什么?
我最近被告知(通过@chux)第三个条件不是在C标准中,而是被定义的实现,和前两个一样。 –
你可以看看[http://stackoverflow.com/questions/13932932/why-does-stdout-need-explicit-flushing-when-redirected-to-file#13933741](http://stackoverflow.com/questions/13932932/why-do-stdout-need-explicit-flush-when-redirected-to-file#13933741) – owacoder
@WeatherVane:我想你误会了。对于线路缓冲输出流,行为*是C所必需的,但stdout不需要行缓冲,除非它是交互式设备。 –