我正在编写一个使用POSIX共享内存的程序,并且有一个错误,我不确定如何修复。我查找了类似的问题,但找不到任何与此特定问题相关的问题。
涉及两个文件 - server.c,其中包含程序运行的代码,shm.c,其中包含为处理共享内存提供抽象的函数。这是一项任务,因此我不能偏离目前的结构。
以下是每个文件的相关代码:
server.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
非常感谢任何帮助。
答案 0 :(得分:2)
该行
<img src="/var/www/myapplication/static/images/some_picture.png">
对共享内存对象没有任何一个访问权限。创建没有访问权限的共享内存对象后,只有root用户才能打开它。
相反,请使用(例如)
fileDesc = shm_open(shname, O_CREAT | O_RDWR, 0);
(显然,您可以允许其他用户访问共享内存。但您至少需要允许自己访问它;否则,一旦创建它就无法打开它。 )
或许值得注意的是,您的错误消息不正确,因此您可能会误导自己(以及其他人)。当{em>创建共享内存对象时,对fileDesc = shm_open(shname, O_CREAT | O_RDWR, S_IRWXU);
的调用不会失败。失败的是在没有用户所有权限的情况下打开已创建的共享内存对象。