linux 系統中將數據寫入文檔不能當即保存問題的解決方法

應用場景:緩存

        設備跑的是Linux系統,與PC上位機進行通訊,上位機能夠給Linux發送設備配置信息,Linux將配置信息寫入文件中以備設備斷電重啓時使用。同步

bug現象:it

        設備正常運行,設備配置信息爲A,此時經過上位機給給Linux發送行的設備信息B,並進入Linux系統查看,設備配置信息已被正確寫入文件中, 而後給設備斷電重啓,待設備運行穩定發現設備配置信息仍爲A。配置

bug分析:bug

       1. 能夠肯定的是上位機向Linux系統發送設備配置信息的信道鏈接是沒有問題的;方法

        2. Linux進行設備信息保存的過程是正常的。通信

解決過程:數據

       1. 在Linux將設備配置信息寫入文件後,再從新讀出,該方法不能解決問題,上位機發送完配置信息後當即給設備斷電重啓,依然會出現上述現象;文件

       2.  在Linux將設備信息寫入文件後,調用fflush(),手動沖刷緩存,該解決方法和 1 同樣,不能徹底解決問題;時間

       3. 在Linux將設備信息寫入文件後,system("sync"); 強制同步緩存和硬盤,問題獲得解決。

 

綜上,應該是fwrite()只是將數據寫在了緩存中,而沒有同步到硬盤(SD卡)中去,Linux系統應該也有緩存同步機制,但我還不太清楚具體是怎樣的,應爲在上面的解決過程當中,若是在上位機發送完配置信息後,等待 2 分鐘, 數據仍是能夠保存的,可是設備在實際使用中是不必定能等這麼久的時間的因此最終使用的方法3的解決方案。關於Linux系統緩存的同步機制後期再研究了。
相關文章
相關標籤/搜索