1. 程式人生 > >linux 系統中將資料寫入文件不能立即儲存問題的解決方法

linux 系統中將資料寫入文件不能立即儲存問題的解決方法

應用場景:

        裝置跑的是Linux系統,與PC上位機進行通訊,上位機可以給Linux傳送裝置配置資訊,Linux將配置資訊寫入檔案中以備裝置斷電重啟時使用。

bug現象:

        裝置正常執行,裝置配置資訊為A,此時通過上位機給給Linux傳送行的裝置資訊B,並進入Linux系統檢視,裝置配置資訊已被正確寫入檔案中, 然後給裝置斷電重啟,待裝置執行穩定發現裝置配置資訊仍為A。

bug分析:

       1. 可以確定的是上位機向Linux系統傳送裝置配置資訊的通道連線是沒有問題的;

        2. Linux進行裝置資訊儲存的過程是正常的。

解決過程:

       1. 在Linux將裝置配置資訊寫入檔案後,再重新讀出,該方法不能解決問題,上位機發送完配置資訊後立即給裝置斷電重啟,依然會出現上述現象;

       2.  在Linux將裝置資訊寫入檔案後,呼叫fflush(),手動沖刷快取,該解決方法和 1 一樣,不能完全解決問題;

       3. 在Linux將裝置資訊寫入檔案後,system("sync"); 強制同步快取和硬碟,問題得到解決。

 

綜上,應該是fwrite()只是將資料寫在了快取中,而沒有同步到硬碟(SD卡)中去,Linux系統應該也有快取同步機制,但我還不太清楚具體是怎樣的,應為在上面的解決過程中,如果在上位機發送完配置資訊後,等待 2 分鐘, 資料還是可以儲存的,但是裝置在實際使用中是不一定能等這麼久的時間的所以最終使用的方法3的解決方案。關於Linux系統快取的同步機制後期再研究了。