gpt4 book ai didi

c - msync() 只写入文件更改的页面还是完全缓存的缓冲区?

转载 作者:太空狗 更新时间:2023-10-29 12:04:28 27 4
gpt4 key购买 nike

我在 Linux 中使用 POSIX 函数 mmap()。但是当我执行 msync() 时,它会将缓存缓冲区完全写入文件,还是会以某种方式在某处记录哪些页面已更改,哪些页面未更改,并且写入文件仅更改 -即 msync() 是仅写入文件更改的页面还是完全写入缓存缓冲区?

假设我们使用 mmap() 处理 1 GB 的文件,读取所有文件,即通过整个文件内存中引发的大量页面错误。然后我们只改变一个字节,调用msync(),然后它会开始记录整个1GB到一个文件或者以某种方式确定你想要改变的页面并且只会保留它,并且它是如何定义的 - 它是如何做到这一点的?

最佳答案

msync 做你想做的事:它只会写入实际修改过的页面。实际上,msync 在 Linux 或任何具有适当虚拟内存和页面缓存系统的系统上基本上是空操作; read 将立即看到任何写入 mmapped 页面的内容,即使没有 msync。它在很大程度上类似于 fsync,但它的参数是内存地址范围而不是文件描述符。另一个可观察到的效果是它导致文件修改时间被更新。

关于c - msync() 只写入文件更改的页面还是完全缓存的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com