首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的共享内存: Shmget问题

C中的共享内存: Shmget问题
EN

Stack Overflow用户
提问于 2016-12-02 06:43:50
回答 2查看 2.4K关注 0票数 0
代码语言:javascript
复制
int shmid;
int* locat;

//create shared memory segment
shmid = shmget(6666, size, 0666);
if (shmid < 0) {
    perror("shmget");
    exit(1);
}

locat = (int *) shmat(shmid, NULL, 0);
if (locat == (int *) -1) {
    perror("shmat");
    exit(1);
}

我正在将共享内存设置为这样,但是我一直收到以下错误:shmget: No such file or directory

这段代码运行良好,不知道为什么现在会发生这种情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 06:59:54

就像那个人说的

IPC_CREAT 创建一个新的段。如果不使用此标志,则shmget()将找到与键关联的段,并检查用户是否拥有访问该段的权限。

必须将IPC_CREAT添加到shmget调用中

代码语言:javascript
复制
shmid = shmget(6666, size, IPC_CREAT | 0666);

您还可以使用IPC_EXCL确保新创建的段。

IPC_EXCL 此标志与IPC_CREAT一起使用,以确保此调用创建段。如果段已经存在,则调用失败。

票数 1
EN

Stack Overflow用户

发布于 2017-10-20 09:03:54

有两件事:

  1. 当您想要初始化一个共享内存(对应于一个特定的键值)时,您必须使用IPC_CREAT的BITWISE或权限号。

就像

代码语言:javascript
复制
shmget(6666 , size , 0666|IPC_CREAT);
  1. 当您希望将相同的段(由键值标识)附加到另一个进程时,IPC_CREAT并不是必需的,因为共享内存已经创建了逻辑地址空间。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40926336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档