前言
很多時候,為了防止程序意外結束等原因造成的數據丟失,我們需要在向文件寫入一組數據以後立即刷新緩存區。比如説:在寫程序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()
函數,字符串就不能被正確的保存在文件中。