【发布时间】:2023-03-19 12:08:01
【问题描述】:
我正在编写一个使用 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
任何帮助将不胜感激。
【问题讨论】:
-
给它一些非零的
mode怎么样? -
@EugeneSh。我尝试将模式更改为 S_IRWXU(包括 stat.h)。还尝试了 S_IRWXO 和 S_IRWXG。仍然给出同样的错误
-
@bitrost:可能是因为您使用 0 模式至少运行了一次程序,创建了您无法访问的 shm 对象,该对象现在仍然存在。您需要将其删除。如果您在 Linux 上运行,请尝试
ls /dev/shm查看所有现有的 shm 对象... -
文件:
shm.h似乎缺少文件shm.c中函数的原型。文件:server.c似乎缺少声明:#include "shm.h -
调用
shm_open()和调用perror()失败后,代码需要调用shm_unlink()和exit( EXIT_FAILURE )
标签: c posix shared-memory