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()函式,字串就不能被正確的儲存在檔案中。