gpt4 book ai didi

c - 无法创建共享内存 C

转载 作者:行者123 更新时间:2023-12-04 05:17:49 24 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




9年前关闭。




以下代码总是返回 -1用于创建共享内存。我不知道它的原因。据我所知,我的代码是正确的。 Perror returns not such file or directory .我不知道它指向什么,但是这个文件和标题在同一个目录中。这是代码:

#include "MyShared.h"


int main()
{
struct MyShared *obj;

int shmid,i,childpid;

shmid=shmget(MySharedKey,sizeof(struct MyShared),PERM);
if(shmid==-1)
printf("Failed to create shared mem\n");
obj=(struct MyShared*)shmat(shmid,NULL,0);

obj->ReadFromBuf=0;
....
}

这是头文件。 My Shared.h
#ifndef MYSHARED_H_INCLUDED
#define MYSHARED_H_INCLUDED

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>


#define PERM (S_IRWXU | S_IRGRP)
#define MySharedKey 564732
#define SIZE 512 // 512 bytes

struct MyShared
{
char buf[SIZE];

int ReadFromBuf,WriteToBuf,readbytes;
};

#endif

为什么这段代码不能创建共享内存?

我正在使用 ubuntu 10.04。

我关注 Unix System programming by Stevens它没有说明任何内容或共享内存的创建权限。

问候

最佳答案

代替

printf("Failed to create shared mem\n");

更好地使用
perror("Failed to create shared mem");

这将评估 errno变量并打印更有用的错误消息,在您的情况下类似于
Failed to create shared mem: No such file or directory

原因是您尝试附加到不存在的内存段。

为了 创建 一个共享内存段,你需要通过 IPC_CREAT标记为 shmget() :
shmid=shmget(MySharedKey,sizeof(struct MyShared),PERM | IPC_CREAT);

另见 http://www.kernel.org/doc/man-pages/online/pages/man2/shmget.2.html

如果您没有传递此标志,则假定共享内存段已经存在并且您的进程想要附加到它。这是您的 需要做的事情。奴隶 想要访问共享内存段的进程,一旦它被某些 创建大师 过程。

关于c - 无法创建共享内存 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031240/

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