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()函數,字符串就不能被正確的保存在文件中。