gpt4 book ai didi

c - 共享内存 - shm_open 导致权限被拒绝

转载 作者:行者123 更新时间:2023-12-01 12:15:17 26 4
gpt4 key购买 nike

我正在编写一个使用 POSIX 共享内存的程序,但有一个我不确定如何修复的错误。我寻找了类似的问题,但找不到与此特定问题相关的任何问题。

涉及两个文件 - server.c,其中包含程序运行的代码,以及 shm.c,其中包含为处理共享内存提供抽象的函数。这是一个作业,所以我不能偏离当前的结构太远。

以下是每个文件的相关代码:

服务器.c

int shmFd;

shmFd = createSHM(SHNAME);

shm.c
int createSHM(char * shname)
{
int fileDesc;

fileDesc = shm_open(shname, O_CREAT | O_RDWR, 0);

if(fileDesc == -1)
{
perror("Error: Could not create shared memory space");
}

return fileDesc;
}

shm.h
#define SHNAME "/shmserver" 

当我尝试在终端中运行构建的程序时,出现以下错误:
Error: Could not create shared memory space: Permission denied 

任何帮助将非常感激。

最佳答案

线

fileDesc = shm_open(shname, O_CREAT | O_RDWR, 0);

没有人授予任何人对共享内存对象的任何访问权限。一旦你创建了一个没有访问权限的共享内存对象,只有 root 用户才能打开它。

相反,使用(例如)
fileDesc = shm_open(shname, O_CREAT | O_RDWR, S_IRWXU);

(显然,您可以允许其他用户访问共享内存。但您至少需要允许自己访问它;否则,一旦创建它,​​您将无法打开它。)

也许值得注意的是,您的错误消息不正确,因此您可能会误导自己(和其他人)。调用 shm_open创建共享内存对象时不会失败。失败的是在没有用户所有权限的情况下打开一个已经创建的共享内存对象。

关于c - 共享内存 - shm_open 导致权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49016924/

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