fwrite檔案操作,斷電情況下,檔案丟失

2021-08-14 02:11:32 字數 636 閱讀 7804

程式中,正常的檔案操作,

file *fp= fopen("檔名","a+");

if(fp== null) return;

fwrite(buffer,size,count,fp);

fflush(wfile);

fclose(wfile);

非法關機(斷電)之前,能在磁碟上看到檔案,但是非法關機,重啟之後,檔案丟失。

百思不得其解。

檢視資料終於弄明白:

通過fwrite函式之後,檔案是被寫到緩衝區的,

呼叫fflush函式之後,會把緩衝區中的檔案寫到檔案系統中,資料還沒有被真正的寫入到物理介質上,

呼叫fileno獲得檔案描述符之後,再呼叫fsync 函式返回後才將檔案寫入到物理介質上。

正確**如下:

file *fp= fopen("檔名","a+");

if(fp== null) return;

fwrite(buffer,size,count,fp);

fflush(wfile);

fsync(fileno(fd));

fclose(wfile);

測試驗證ok。

GIT 多種情況下的撤銷操作

撤銷更改 使用checkout out 可以撤銷工作區的修改 修改內容會丟失 如果沒有執行過git add命令,恢復到上一版本。如果執行過git add命令,則恢復到add之前的狀態。git checkout 對當前所有檔案執行此操作 git checkout file 對某一file執行此操作 撤...

在這種情況下

愛聽好話是人的本性,無論你貧富貴賤,春秋長幼。有朋友告知我他教育兒子學鋼琴的事 兒子8歲時,朋友給他買了一架鋼琴,可是小男孩頑皮好動,不好好學,朋友的妻子常常為此訓斥他,卻不起作用。於是,朋友就開端想措施怎樣使孩子喜歡彈鋼琴。一天下戰書,當孩子為敷衍父母,隨意彈了一段曲子籌備溜時,朋友鳴住他說,兒子...

阿里雲SLB情況下訪問檔案問題

背景 有兩台ecs伺服器都部署了相同的站點,訪問時通過slb進行分發。問題 假如第一次通過slb訪問時分發到了後端的ecs1伺服器,上傳的檔案也放在了ecs1伺服器上。第二次再次通過slb訪問時恰好分發到了ecs2伺服器,這時候就訪問不到上次上傳的檔案了。備註 檔案的訪問方式如下 解決方案 1 實時...