我們正在測試我們的系統(目前運行在嵌入式 Windows 7 上)如果在沒有警告的情況下斷電,系統將如何運作。我們的 PC 故意不使用 UPS 運作。
在一項測試中,我們在記事本中創建了一個簡單的文本文件,添加了一些文本,保存了文件,然後在幾秒鐘後關閉電源,即不是正常關機。
當我們重新啟動電源時,對文件的更改尚未保存。
經過進一步調查,我們注意到我們的 Crucial MX200 SSD 已選取「在裝置上啟用寫入快取」。
後取消選取在該設定下,我們再次嘗試測試,假設磁碟寫入將立即寫入,而不是快取。
但和以前一樣,如果我們在「儲存」檔案幾秒鐘後切斷電源,對檔案的更改仍然不會被儲存。
更新 - 我們使用 2 個不同品牌的 SSD 和 HDD 測試了此行為,而行為是相同的。看起來寫快取永遠不會被停用...
我們還有什麼遺漏的嗎?
答案1
一旦我們確認問題並非特定於某一特定品牌或類型的驅動器,我們就懷疑這是 Windows 行為,在我們的例子中是 Windows 7。
經過進一步搜索,我們找到了這篇文章: Windows 多久刷新一次寫入快取?
這證實了完全刷新 Windows 內部檔案快取需要 8 秒。
解決方法是更新我們的原始程式碼,如下所示 -https://jeffpar.github.io/kbarchive/kb/066/Q66052/。
在使用 開啟檔案時fopen
,我們將 Microsoft 特定的模式選項「c」作為最後一個選項,並且_flushall()
在呼叫 之前立即使用fclose()
。