fflush(stdout)
是 C 语言标准库中的一个函数,用于刷新标准输出流(stdout)。
在 C 语言中,当我们使用 printf
或其他输出函数向标准输出写数据时,这些数据可能不会立即被发送到终端或文件,而是被缓存起来,以提高输出效率。
fflush
函数的作用是将指定流的输出缓冲区中的内容强制写入到流所关联的文件或设备中。
对于 stdout
,这意味着任何缓存的输出都会被立即发送到终端。
头文件
#include <stdio.h>
函数原型
int fflush(FILE *stream);
参数
stream
:指向FILE
对象的指针,该FILE
对象标识了要刷新的流。
返回值
- 如果成功,返回 0。
- 如果出错,返回非零值(通常是
EOF
)。
注意事项
-
缓冲区刷新:
fflush
会刷新缓冲区,但不会关闭流。流仍然保持打开状态,可以继续写入。 -
性能影响:频繁地刷新缓冲区可能会降低程序的性能,因为每次调用
fflush
都会导致实际的 I/O 操作,这通常比写入缓冲区要慢。 -
标准输出:对于
stdout
,fflush(stdout)
通常用于确保所有输出都被显示,特别是在需要即时反馈的交互式程序中。 -
标准行为:在某些系统上,
fflush(stdout)
可能不会做任何事情,因为标准输出默认是行缓冲的,这意味着每当遇到换行符时,缓冲区会自动刷新。 -
C11 标准:从 C11 标准开始,
fflush
在刷新stdout
、stdin
和stderr
时是未定义行为,因为这些流是未缓冲的。在 C11 之前的版本中,fflush(stdout)
是有效的。(查看当前linux系统中支持的C标准方法见:C99、C11和C17标准的区别-CSDN博客) -
跨平台行为:不同操作系统和编译器对
fflush
的实现可能有所不同,因此在跨平台编程时需要注意。
示例代码
#include <stdio.h>
int main() {
printf("Hello, ");
fflush(stdout); //确保"Hello, "被立即输出
printf("World!\n");
return 0;
}
在这个示例中,即使在没有换行符的情况下,fflush(stdout)
也会确保 "Hello, " 被立即输出到终端。