C语言操作文件时写完一组数据后立即刷新缓存区的方法

前言

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