mmap 共享内存段上的 mprotect

sun*_*mat 7 c memory shared mprotect

当两个进程共享打开的一段内存shm_open然后对其进行mmap-ed 时,在一个进程中对共享内存的一部分进行操作是否会影响另一个进程在同一部分上mprotect看到的权限?换句话说,如果一个进程将共享内存段的一部分设置为只读,那么它对于另一进程也将变为只读吗?

Jon*_*ler 1

POSIX 规范mprotect()建议共享内存保护的更改应该影响使用该共享内存的所有进程。

详细的两个错误情况是:

  • [EAGAIN] 该prot参数在 MAP_PRIVATE 映射上指定 PROT_WRITE,并且没有足够的内存资源来保留用于锁定专用页面。
  • [ENOMEM] 该prot参数在 MAP_PRIVATE 映射上指定 PROT_WRITE,并且如果需要,它将需要比系统能够提供的空间更多的空间来锁定私有页面。

这些强烈表明,使用 MAP_SHARED 映射的内存不应因缺乏用于制作副本的内存而失败。

另请参阅 POSIX 规范mmap()

  • 如果在两个答案之间进行选择,我也会接受另一个。 (2认同)