前言
很多时候,为了防止程序意外结束等原因造成的数据丢失,我们需要在向文件写入一组数据以后立即刷新缓存区。比如说:在写程序LOG的时候,为了防止程序崩溃时无法记录LOG,就需要记录一条LOG就刷新一次缓存区以使其立即写入磁盘文件。
实现方法
使用C标准库提供的fflush(FILE *)
函数可以很方便的实现该功能,只需传入要刷新缓存区的文件指针即可。
示例程序
#include <stdio.h> int main(void) { FILE *fp = fopen("LOG.txt", "w"); fprintf(fp, "hello!");// 使用一个明显小于缓存区的字符串做测试,若大于缓存区则缓存区在满了以后会自动刷新 fflush(fp); // 立即刷新缓存区,若删除此语句则字符串不会被保存在文件中。 fp++; // 偏移文件指针到未知地址。 fclose(fp); // 由于fp指向未知地址,所以执行fclose后程序会崩溃。 return 0; }
经观察可以发现,不使用fflush()
函数,字符串就不能被正确的保存在文件中。