C 库 - fflush() 函数



C 库的 fflush() 函数用于刷新流的输出缓冲区。此函数强制将给定输出或更新流的所有缓冲数据写入文件。当应用于输入流时,其行为未定义。刷新流可确保将内存中缓冲的任何数据写入与流关联的文件或设备。

语法

以下是 C 库 fflush() 函数的语法:

int fflush(FILE *stream);

参数

  • stream: 这是一个指向 FILE 对象的指针,用于指定要刷新的流。如果 stream 为 NULL,则 fflush 将刷新所有打开的输出流。

返回值

如果缓冲区成功刷新,fflush 函数返回 0,表示成功。如果发生错误,则返回 EOF,表示失败,并且流的错误指示器被设置。

示例 1:刷新输出流

此示例演示如何使用 fflush 来确保缓冲输出立即写入文件。

以下是 C 库 fflush() 函数的示例。

#include <stdio.h>

int main() {
   FILE *file = fopen("example1.txt", "w");
   if (file == NULL) {
       perror("Failed to open file");
       return 1;
   }

   fprintf(file, "Hello, World!\n");

   // Ensure "Hello, World!" is written to the file immediately
   fflush(file); 

   fclose(file);
   return 0;
}

输出

以上代码将“Hello, World!”写入文件,并使用 fflush 确保数据立即写入磁盘,而不是等到文件关闭。−

Hello, World!

示例 2:刷新所有打开的输出流

在本例中,我们将不同数据写入两个文件,并使用 fflush(NULL) 刷新所有打开的输出流,确保所有数据在关闭文件之前写入磁盘。

#include <stdio.h>

int main() {
   FILE *file1 = fopen("example3_1.txt", "w");
   FILE *file2 = fopen("example3_2.txt", "w");
   if (file1 == NULL || file2 == NULL) {
       perror("Failed to open file");
       return 1;
   }
   
   fprintf(file1, "Data for file 1.\n");
   fprintf(file2, "Data for file 2.\n");
   
   // Flush all open output streams
   fflush(NULL); 
   
   fclose(file1);
   fclose(file2);
   return 0;
}

输出

执行上述代码后,它将不同数据写入两个文件,并使用 fflush(NULL) 刷新所有打开的输出流,确保所有数据在关闭文件之前写入磁盘。−

Data for file 1.
Data for file 2.
广告