我只是好奇自动刷新stdout缓冲区需要满足哪些条件。
首先,我感到困惑的是这个伪代码没有在每次迭代时打印输出:
while (1) {
printf("Any text");
sleep(1);
}
但如果我添加换行符,它就会生效。
经过几次实验,我发现在我的机器上,stdout缓冲区被刷新的情况有:
- 当我向stdout输出1025个或更多字符时;
- 当我读取stdin时;
- 当我向stdout输出换行符时;
第一个条件是完全明确的——当缓冲区满时应该将其刷新。第二个条件也是合理的。但是为什么换行符会导致刷新呢?这其中还有哪些隐含的条件呢?
'\n'
是否指定刷新输出?fflush(stdout);
更具可移植性和确定性...”,所以我不是很了解情况,而是受到了质疑。 - Weather Vane