为啥我拒绝尝试 shm_open 的权限?

Posted

技术标签:

【中文标题】为啥我拒绝尝试 shm_open 的权限?【英文标题】:Why am I denied permission trying to shm_open?为什么我拒绝尝试 shm_open 的权限? 【发布时间】:2021-12-29 18:56:46 【问题描述】:

考虑以下 C 程序:

#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/types.h>
#include <string.h>

int main() 
    const char* name = "/memmap_ipc_shm";
    int shmFd = shm_open(name, O_RDWR | O_CREAT, 0777);
    if (shmFd < 0) 
        fprintf(stderr,"bad shmfd opening %s: %s\n", name, strerror(errno));
        return -1;
    
    return 0;

当我在我的 GNU/Linux 系统(Devuan Beowulf,Linux 5.10.0-9,amd64 CPU)上运行它时,我得到:

bad shmfd opening /memmap_ipc_shm: Permission denied

为什么我的权限被拒绝?我很确定我遵循了man shm_open 页面中的所有准则,我请求的权限似乎没问题 - 那么有什么问题?

【问题讨论】:

【参考方案1】:

当您已经创建此共享内存对象时可能会发生这种情况,但可能没有适当的 .尝试调用shm_unlink(name) 以确保是这种情况(如果再次遇到权限失败,甚至以root 身份调用)。

请注意,此行为似乎与手册页冲突:

O_EXCL If O_CREAT was also specified, and a shared memory object with the given
       name already exists, return an error.  The check for the existence of the
       object, and its creation if it does not exist, are performed atomically.

【讨论】:

以上是关于为啥我拒绝尝试 shm_open 的权限?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pip 在安装 scikit-learn 时会出现权限被拒绝的错误?

当我尝试使用 EF 在 ASP.NET MVC5 中查询视图时,为啥会收到错误“数据库 'ELITEPROD' 中的 CREATE TABLE 权限被拒绝”?

为啥我会收到“权限被拒绝”?

查找中的权限被拒绝:为啥我们需要 2>&1?

Django Rest:为啥访问被拒绝,尽管 AccessAny 被设置为权限?

为啥 Python pyusb usb.core 访问由于权限而被拒绝,为啥 rules.d 不能修复它?