c-同一文件、同一进程中的多个MAP_PRIVATE映射是否仍然是私有的



Linuxmmap(2)表示:

MAP_PRIVATE创建写映射时的专用副本。映射的更新对于映射同一文件的其他进程是不可见的,并且不会传递到基础文件。未指定mmap()调用后对文件所做的更改在映射区域中是否可见。

我特别问这个部分:"对于映射同一文件的其他进程不可见">

但是这个过程中同一文件的其他映射呢

我理解"更改。。。不被携带到底层文件">,但这并不能清楚地表明这些更改是否会影响同一文件的其他映射。

以下相关问题不能回答这个问题:

  • 查询MAP_PRIVATE
  • 写入MAP_PRIVATE mmaped文件
  • 线程的mmap中MAP_PRIVATE和MAP_SHARED之间的差异

Nate Eldredge指出POSIX mmap规范也没有指定这种行为,只指出:

如果指定了MAP_PRIVATE,则调用进程对映射数据的修改应仅对调用进程可见,并且不应更改底层对象。

我认为

不应更改底层对象

明确了意图。当您在同一过程中再次mmap相同的底层对象时,您再次制作了底层对象的映射,其内容由该底层对象的内容决定。

诚然,它可以/应该更清楚。

最新更新