C fflush
fflush
函数用于刷新输出缓冲区,将缓冲区中尚未写入文件或终端的数据立刻写入目标设备(如文件或终端)。
它常用于确保数据即时输出,尤其是在使用缓冲输出的场景中。
函数原型
1
2
3
#include <stdio.h>
int fflush(FILE *stream);
参数说明
参数 | 说明 |
---|---|
stream | 指定要刷新的输出流。可以是文件指针,如 stdout 、stderr 、或 fopen 打开的文件。特殊地,当 stream 为 NULL 时,fflush 会刷新所有输出流。 |
返回值
返回值 | 说明 |
---|---|
0 | 成功刷新缓冲区。 |
EOF | 刷新失败,发生错误,可通过 perror() 查看原因。 |
用法示例
fflush()
的作用是用来刷新缓冲区
fflush(stdin)
刷新标准输入缓冲区,把输入缓冲区里的东西丢弃;fflush(stdout)
刷新标准输出缓冲区,把输出缓冲区里的东西强制打印到标准输出设备上。fflush(stdin)
不太常用,在有些编译器中是错误的用法,可以用以下方法替代:while(getchar()!='/n')
;fflush(stdout)
在单进程程序中作用不大,但在多进程程序中很有用。程序的输出内容一般不会立即输出,而是在程序结束后再输出。fflush(stdout)
会强制每次printf()
都立即显示在标准输出设备上。
手动刷刷新终端输出
1 2
printf("请输入用户名: "); fflush(stdout); // 立即显示提示
stdout默认是是行缓冲的,遇到
\n
就写内容清缓存写文件后立刻保存
1 2 3
FILE *fp = fopen("log.txt", "w"); fprintf(fp, "日志记录...\n"); fflush(fp); // 强制写入文件
刷新所有流
1
fflush(NULL);
本文由作者按照 CC BY 4.0 进行授权