回答
您需要調用fdatasync(或fsync,如果您確實需要同步元數據)並等待它返回。
你可以從另一個線程做到這一點,但是如果一個線程在另一個線程正在執行fdatasync()時寫入該文件,那麼將不清楚哪個寫入保證是持久的或不是。
想要以保證持久的方式存儲事務日誌的數據庫需要調用fdatasync。數據庫(如innodb)通常在其主數據文件中使用直接IO(以及它們自己的數據緩存,而不是依賴於操作系統),以便他們知道它將以可預測的方式寫入。
據我所知,當文件(或mmap
ed區域)發生實際同步時,甚至不是文件的時間戳將要改變。但是,您可以使用fsync
強制執行文件(或區域)的同步。
也很難看出你爲什麼要這樣做的原因。文件IO應該是不透明的。
mmh ..我可以看到很多原因。 –
我需要它的原因是,一旦寫入磁盤已被確認,我需要生成客戶收據。不能承受一個數據寫入磁盤的數據無法打開收據.. – gamedynamix
@gamedynamix我建議你只要做你的寫和調用'fsync'這種方式,你可以確信數據被寫入並生成您的收據。 – pmr
- 1. 以磁盤友好的方式將數據寫入磁盤?
- 2. 返回數據幀vs寫入磁盤並從磁盤讀取csv的效率
- 3. python dumbdbm,數據何時寫回磁盤?
- 4. NSUserDefaults寫入磁盤?
- 5. 將HDFS數據寫入外部磁盤/磁帶
- 6. FMDB databaseWithPath:不寫入磁盤
- 7. 將PFObject寫入磁盤
- 8. 文件寫入磁盤
- 9. UIWebView寫入磁盤方法
- 10. 隨機磁盤寫入
- 11. NSUserDefaults不會寫入磁盤
- 12. 寫系統調用直接寫數據到磁盤?
- 13. 將reg文件傳遞給regedit而不寫入磁盤(以避免將解密數據寫入磁盤)
- 14. 如何有效地將傳入數據寫入磁盤?
- 15. 什麼數據庫寫入磁盤真的很快?
- 16. 將大數據結構作爲EDN寫入clojure中的磁盤
- 17. cProfile - 保留Python對象中的數據/延遲寫入磁盤
- 18. 將數據流寫入磁盤的最快方法
- 19. 如何分配磁盤中的文件來寫入數據C++
- 20. HDFS如何寫入數據節點上的磁盤
- 21. 修改由Ext4文件系統寫入磁盤的數據
- 22. 要求Windows將數據寫入磁盤的不同方法
- 23. golang的磁盤寫入性能
- 24. 不寫入磁盤的C++文件
- 25. 頻繁的寫入和磁盤磨損
- 26. 寫入磁盤上的每個LBA
- 27. 將System.Xml.XmlElement寫入磁盤上的文件
- 28. mysql插入計數與磁盤io寫入計數的關係
- 29. iOS可以從磁盤寫入或讀取圖像數據
- 30. 如何在VBScript中將二進制數據寫入磁盤?
您能否提供更多關於您已經嘗試的內容以及您遇到問題的部分代碼?在目前的形式下,這個問題可能會得到一個簡單的「是」或「否」的答案。 – chown
我還沒有嘗試過任何東西。我正在尋找一種方法來確認數據實際上已被提交到磁盤。我研究過DBMS日誌記錄技術,但如果可能的話,我想盡量避免這種路徑...希望操作系統發出一個信號,告訴我已經完成將這個塊寫入磁盤。有這樣的事嗎? – gamedynamix
無論如何,您可能需要使用日誌記錄 - 在發出寫入和同步完成時,如果系統在此刻斷電,則正在寫入(甚至部分)任何數據塊可能會完全丟失。 – bdonlan