2014-09-29 64 views
2

假定程序打開一個用於寫入的內存映射文件的情況。在將內容寫入文件後立即調用exit(0)。現在我的問題是內核在這種情況下做了什麼?它在關閉文件描述符時將內存映射區域的內容刷新到文件,還是丟棄緩衝區中的內容?Linux 3.14關閉過早退出的程序的文件句柄的策略

回答

2

也沒有。它不會丟棄數據。通過內核中的文件/頁面緩存映射的數據,並且在內核找到方便的時候(或者直到你的程序顯式地發出msync()調用))將被刷新到磁盤。這與在文件描述符上執行正常write(),關閉()該文件描述符或退出程序時發生的情況幾乎相同。

請記住,對該文件的訪問需要經過相同的內核緩存,所以其他進程會立即看到您寫入的數據,無論進程是否崩潰。 (雖然可能受到記憶障礙的影響)。

+0

當然,它也取決於調用'mmap()'的確切參數。有些情況下,寫操作也會基本被忽略(即'MAP_PRIVATE'或'MAP_ANONYMOUS')... – twalberg 2014-09-29 16:33:00

+0

@nos這實際上並不適用於linux 3.14 kernel.I創建了一個程序來測試它。 http://blogs.msdn.com/b/oldnewthing/archive/2010/04/28/10003540.aspx在這裏列出的視圖在實際上對於linux 3.14是真實的。 – gibraltar 2014-09-30 10:58:41

+1

@gibraltar聽起來像這個答案和你引用的博客帖子一致。你認爲這個答案描述了哪些不是真實的行爲? – Peter 2014-09-30 13:17:58