前言
很多時候,為了防止程式意外結束等原因造成的資料丟失,我們需要在向檔案寫入一組資料以後立即重新整理快取區。比如說:在寫程式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()
函式,字串就不能被正確的儲存在檔案中。