搞懂 fflush(stdout)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搞懂 fflush(stdout)相关的知识,希望对你有一定的参考价值。

参考技术A

使用 printf 或 cout 打印内容时,输出永远不会直接写入“屏幕”。而是,被发送到 stdout。 (stdout 就像一个缓冲区)

默认情况下,发送到 stdout 的输出然后再发送到屏幕(我们可以根据需要将其重定向到其他文件/流)。同样,stdin 默认映射到键盘,但可以重定向到任何其他文件/流。

现在,默认情况下,stdout 是 行缓冲 的。这意味着,发送到 stdout 的输出不会被立即发送到屏幕以供显示(或重定向文件/流),直到它在其中获得换行符。因此,如果要覆盖默认缓冲行为,则可以使用 fflush 清除缓冲区(立即将所有内容发送到屏幕/文件/流)。

过一段时间后输出 hello world! 再过一段时间输出 Welcome.

立即输出 Hello, 过一段时间输出 world!,又过一段时间输出 Welcome.

能理解吗?

不能理解也没关系,我也感觉我没说清楚 :)

就单拿输出到屏幕上来说,printf 这样的函数不是直接打印到屏幕上的,而是先放在一个缓冲区中(stdout)中。如果收到了一个换行符,就会把这个缓冲区的内容打印到屏幕上,并清空。而 fflush 的作用就是直接把缓冲区的内容打印到屏幕上,并清空缓冲区。不必等换行符

以上是关于搞懂 fflush(stdout)的主要内容,如果未能解决你的问题,请参考以下文章

Linux C语言printf()函数不加换行符就不能输出打印的内容(fflush(stdout) 刷新缓冲区)

调用printf%s时出现分段错误

getchar fflush 的分析笔记

fflush和标准输入与输出

fflush和标准输入与输出

printf 遇到bash重定向