文章

C fflush

fflush 函数用于刷新输出缓冲区,将缓冲区中尚未写入文件或终端的数据立刻写入目标设备(如文件或终端)。

它常用于确保数据即时输出,尤其是在使用缓冲输出的场景中。

函数原型

1
2
3
#include <stdio.h>

int fflush(FILE *stream);

参数说明

参数说明
stream指定要刷新的输出流。可以是文件指针,如 stdoutstderr、或 fopen 打开的文件。
特殊地,当 streamNULL 时,fflush 会刷新所有输出流。

返回值

返回值说明
0成功刷新缓冲区。
EOF刷新失败,发生错误,可通过 perror() 查看原因。

用法示例

fflush()的作用是用来刷新缓冲区

  • fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃;
  • fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西强制打印到标准输出设备上。
  • fflush(stdin)不太常用,在有些编译器中是错误的用法,可以用以下方法替代:while(getchar()!='/n');
  • fflush(stdout)在单进程程序中作用不大,但在多进程程序中很有用。程序的输出内容一般不会立即输出,而是在程序结束后再输出。fflush(stdout)会强制每次printf()都立即显示在标准输出设备上。
  1. 手动刷刷新终端输出

    1
    2
    
     printf("请输入用户名: ");
     fflush(stdout);  // 立即显示提示
    

    stdout默认是是行缓冲的,遇到 \n 就写内容清缓存

  2. 写文件后立刻保存

    1
    2
    3
    
     FILE *fp = fopen("log.txt", "w");
     fprintf(fp, "日志记录...\n");
     fflush(fp);  // 强制写入文件
    
  3. 刷新所有流

    1
    
     fflush(NULL);
    
本文由作者按照 CC BY 4.0 进行授权