2
我正在使用Raspberry Pi將文件寫入到一個micro SD卡(Class 10)中進行數據記錄。如果Pi遇到功率損失,我注意到最後幾個文件沒有寫入。每個文件的大小約爲3 KB。我知道這一點,因爲我已將Pi打印到屏幕上顯示的文件編號上,當我重新啓動它時,會返回幾個數字。什麼時候文件實際上被寫入磁盤?
我試着增加創建新文件的頻率,並且我失去了相同數量的數據時間(我失去了更多的文件數量)。
我的問題確實是將文件寫入物理SD卡的低級過程是什麼?一旦他們身體上卡,他們不應該受到斷電的影響。
- 的fopen新文件
- 文件的fwrite的內容
- fflush到緩衝區刷新到文件
- FCLOSE關閉文件指針
- 重複使用新的文件:我的代碼結構如下
我唯一的理論是,一旦Pi關閉文件,它是由MMU異步寫入到SD卡,文件留在斷電時「MMU隊列」丟失。否則,如果fflush和fclose實際上沒有寫入磁盤,那麼我不確定任何計算機每次關閉時都不會遇到這種損失。
我應該說明SD卡沒有用作外部存儲設備,它是安裝操作系統的磁盤。 – Josh
那麼,考慮到寫入Flash非常慢,並且與讀取相比功耗非常高,我並不感到驚訝的是,驅動程序和SD卡內部控制器中的各種緩存機制都是這樣的。安全':(你使用的是什麼文件系統? –
'fflush'只是刷新標準庫的緩衝區,所以數據完全傳遞給操作系統。使用標準C,沒有辦法控制操作系統的功能。可能使用POSIX'open()'''O_SYNC'也許... –