2014-04-25 70 views
0

我想拷貝一些文件夾和U盤上的文件,並在所有事情完成後立即移除U盤。實現是這樣的:如何在U盤上安全地寫數據 - Linux(ARM) - C++

  • 創建的文件夾(用C++流)創建
  • 複製該文件的內容後,每個目錄描述符中mkdir
  • fsync USB棒相應的文件夾結構
  • fsync後每個文件被複制

右邊的最後一個文件被複制之後,我刪除每個文件描述符USB棒(〜500ms - 1s)。但有時整個文件夾結構都會丟失。爲了避免這種情況,在最後一個文件被複制後,我在每個目錄描述符上再次使用了fsync。這一次所有的文件和文件夾都存在於U盤上,但有時我在文件夾結構中有垃圾,或U盤壞掉了。 USB棒文件系統是vfat。有關如何正確保存數據的任何想法?

+0

初步設想是通過一個同步更換個別fsync作業()中,希望年底,你忘了同步別的東西。如果這不起作用,可以在同步後強制卸載設備嗎? – hdante

+0

使用sync(),整個文件系統將被同步,我試圖避免這一點。 Umount是我目前的解決方案,但是如果有任何其他進程正在使用U盤,umount將會失敗。 – user3458705

+0

因此,如果在另一個進程正在使用USB記憶棒的情況下移除USB記憶棒,那麼文件系統可能會損壞。 – hdante

回答

3

在卸下設備之前卸下它。對於像VFAT這樣的非日誌文件系統,不能保證文件系統在安裝時在磁盤上處於一致的狀態。

1

寫完後,用選項「-o remount,ro」做「掛載」。 這將寫入所有內容並更改爲只讀模式。 其他應用程序可以打開文件。

對於寫作,做「摩的」的選項「-o再登,RW,noatime的」

相關問題