[英]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.