簡體   English   中英

msync()是否只將文件更改的頁面或整個緩存的緩沖區寫入文件?

[英]Does msync() write to file only changed pages or wholly cached buffer?

我在Linux中使用POSIX函數mmap() 但是,當我執行msync() ,它是否將緩存的緩沖區全部寫入文件,或者以某種方式指出某個地方哪些頁面已更改,哪些未更改,並且僅寫入該文件-即msync()寫入文件只更改了頁面還是完全緩存了緩沖區?

假設如果我們通過使用mmap() 1 GB的文件,則全部讀取,即通過整個文件內存中引發的大量頁面錯誤進行讀取。 然后,我們只更改了一個字節,並調用了msync() ,它將開始將整個1GB記錄到文件中,或者以某種方式確定要更改的頁面並將僅保留它以及如何定義它-它是如何做到的?

msync您的要求:它只會寫入實際上已被修改的頁面。 實際上,在Linux或任何具有適當虛擬內存和頁面緩存系統的系統上, msync在很大程度上是禁止操作的; read會立即看到寫入mmap ped頁面的任何內容,即使沒有msync 它在很大程度上是fsync的類似物,但是使用內存地址范圍而不是文件描述符作為參數。 另一個可觀察到的效果是,它導致文件修改時間被更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM