shm_open未设置组写访问权限

时间:2018-06-27 17:13:17

标签: linux file-permissions shared-memory

我正在像这样创建一个新的共享内存对象

  int fd = shm_open("somekey", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);

返回值很好,我希望在/ dev / shm中找到类似以下内容的东西

-rwxrwx--- 1 root   group     4096 Jun 27 19:08 somekey

但是文件中的写访问权限丢失了,我也不知道为什么。

-rwxr-x--- 1 root   group     4096 Jun 27 19:08 somekey

2 个答案:

答案 0 :(得分:1)

您的问题是以下线程的重复内容

POSIX shared memory and semaphores permissions set incorrectly by open calls

mode_t old_umask = umask(0);

int fd = shm_open("somekey", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG);

// restore old
umask(old_umask);

答案 1 :(得分:0)

http://man7.org/linux/man-pages/man3/shm_open.3.html

  

根据模式的低9位设置对象的允许位,除了清除在过程文件模式创建掩码(请参见umask(2))中设置的那些位新对象。

就像做普通的open一样,这只是umask的工作。