前言
很多时候,为了防止程序意外结束等原因造成的数据丢失,我们需要在向文件写入一组数据以后立即刷新缓存区。比如说:在写程序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()函数,字符串就不能被正确的保存在文件中。