當我們撥打close(<fd>)
時,它是否會自動將fsync()
同步到物理媒體?close()在Linux上調用fsync()嗎?
8
A
回答
9
它沒有。調用close()
不保證內容在磁盤上,因爲操作系統可能推遲了寫操作。
作爲一個方面說明,總是檢查返回值close()
。它會讓你知道到目前爲止的任何延期錯誤。如果您想確保內容在磁盤上,請始終致電fsync()
並檢查其返回值。
要記住的一件事是支持商店是什麼。有些設備可能會進行內部寫入推遲,並且在某些情況下內容可能會丟失(雖然較新的存儲介質設備通常使用超級電容來防止此問題,或禁用此功能的方式)。
1
了圓滿的句號並不能保證該數據已經 成功保存到磁盤,因爲內核推遲寫入。它在文件系統關閉流時刷新緩衝區時不常見於 。如果您需要確保物理存儲的數據是 ,請使用fsync(2)。 (這將取決於磁盤硬件在這一點上。)
0
一個圓滿的句號並不能保證該數據已經 成功保存到磁盤,因爲內核推遲寫入。當流 關閉時,文件系統不會沖洗緩衝區,這不是 。如果您需要確保數據是物理存儲的,請使用 fsync(2)。 (這將取決於磁盤硬潔具在這一點上。)
要回答你的問題,NO,close()
不保證fsync()
close
只關閉了該進程並刪除文件描述符與該進程關聯的任何記錄鎖。
相關問題
- 1. 我應該在ServiceController上調用Close()嗎?
- 2. 在你調用mysqli :: close之前你需要調用mysqli_stmt :: close嗎?
- 3. fsync系統調用如何在linux中工作?
- 4. 錯誤發生後,我應該在URLLoader上調用close()嗎?
- 5. 單向WCF調用後在服務代理塊上調用Close()
- 6. 當我在ChannelHandlerContext上調用close()時channelInactive()沒有被調用
- 7. XmlWriter:如果使用using塊,正在調用Close()嗎?
- 8. WPF:我應該在ShowDialog方法打開的窗口上手動調用Close嗎?
- 9. 在我的WCF服務上調用close()會釋放所有資源嗎?
- 10. Context和InitialContext - 我應該在這些對象上調用close()方法嗎?
- 11. MySQL()函數close()在exit()之後仍然會被調用嗎?
- 12. 我應該在ObjectOutputSream的close()之前調用reset()嗎?
- 13. 在這種情況下,我真的需要調用QFile :: close()嗎?
- 14. 在AndroidHttpClient上調用.close在使用ssl時崩潰
- 15. 在Linux上調用Python IDLE
- 16. linux:smart fsync()?
- 17. 何時調用mysqli :: close
- 18. 什麼時候應該在ContentProvider使用的SQLiteOpenHelper上調用close()
- 19. 無法使用ThumbnailToolBarButton在窗口上調用Close關閉
- 20. 刪除文件之前需要fsync嗎?
- 21. 直接調用close()和使用ChannelFutureListener的差別.CLOSE
- 22. JAVA可以在linux平臺上調用.so文件嗎?
- 23. 在讀取器上調用Close()後,MySqlDataReader不會關閉
- 24. 我是否需要在ManualResetEvent上調用Close()?
- 25. close()不是在數據庫上調用明確
- 26. 在MessageQueue上調用Close()或Dispose()什麼都不做
- 27. 在我的linux中,從posix庫或內核中調用close()的哪個版本?
- 28. sched_getcpu()在Linux上可靠嗎?
- 29. python imaplib:我只需要調用.close()一次嗎?
- 30. 在多個文件和一個文件上調用fsync時的性能
調用'fsync()'*不會*,出於同樣的原因(硬件可能推遲了寫入)。 – 2013-03-11 20:57:50
@FrédéricHamidi'fsync()'強制寫入存儲,在什麼情況下fsync不能保證磁盤上的內容(除了在某些情況下不能控制的奇怪故障和硬件延遲寫入)? – 2013-03-11 20:59:10
磁盤控制器中可能有(並且通常是)另一層緩存,所以即使'fsync()也不能保證你的數據已經到達了實際的硬件。 'close()'的[man page](http://linux.die.net/man/2/close)確實提到了這一點。 – 2013-03-11 21:01:04