C shmget中没有此类文件或目录错误

C shmget中没有此类文件或目录错误,c,ubuntu,ipc,shared-memory,C,Ubuntu,Ipc,Shared Memory,我在Ubuntu上用C实现了共享内存的概念。我创建了两个文件server.c和client.c,首先编译server.c,然后编译client.c并运行它。但它显示了一个错误。“没有这样的文件或目录” 此错误出现在client.c文件中,因为找不到请求的共享内存段。请帮助我如何解决这个问题 这是我的密码 服务器.c #include<sys/types.h> #include<sys/shm.h> #include<sys/ipc.h> #in

我在Ubuntu上用C实现了共享内存的概念。我创建了两个文件server.c和client.c,首先编译server.c,然后编译client.c并运行它。但它显示了一个错误。“没有这样的文件或目录” 此错误出现在client.c文件中,因为找不到请求的共享内存段。请帮助我如何解决这个问题

这是我的密码

服务器.c

  #include<sys/types.h>
  #include<sys/shm.h>
  #include<sys/ipc.h>
  #include<string.h>
  #include<stdlib.h>
  #include<stdio.h>
  #include<errno.h>

  #define SHMSIZE 100

 int main()
 {

 int shmid;
 key_t key;
 char *shm, *s;

 key=9876;
 shmid=shmget(key,SHMSIZE,IPC_CREAT|0666);
 if(shmid<0)
 {
 printf("%s",strerror(errno));
 perror("Error in Shared Memory get statement");
 exit(1);
 }

 shm=shmat(shmid,NULL,0);
 if(shm== (char *) -1)
 {
 perror("Error in Shared Memory attachment");
 exit(1);
 }

 memcpy(shm,"Hello World",11);
 s=shm;
 s+=11;

 while(*shm!='*')
 {
 sleep(1);
 }

 return 0;
 }
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义SHMSIZE 100
int main()
{
int shmid;
钥匙(t)钥匙;;
字符*shm,*s;
密钥=9876;
shmid=shmget(键,SHMSIZE,IPC|u CREAT | 0666);
如果(shmidshmget()因“没有这样的文件或目录”而失败,这一事实只意味着它没有找到具有该键的段(现在是迂腐的:没有id-使用id我们通常指shmget()返回的值,随后使用)-您检查过shmid是否相同吗?您的代码在我的系统上运行良好

只是在它周围添加了一个main(),希望对您有所帮助

 key=9876;
 shmid=shmget(key,SHMSIZE,0666);
 if(shmid<0)
 {
        printf("%s",strerror(errno));
        perror("Error in Shared Memory get statement");
        shmid = shmget(key, SHMSIZE, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH | IPC_CREAT);
        if (shmid == -1)  {
                printf("%s",strerror(errno));
                perror("Error in Shared Memory get statement");
                exit(1);
        }
 }
printf("Shmget() successful %d\n",shmid);
key=9876;
shmid=shmget(键,SHMSIZE,0666);
如果(shmidshmget()因“没有这样的文件或目录”而失败,这一事实只意味着它没有找到具有该键的段(现在是迂腐的:没有id-使用id我们通常指shmget()返回的值,随后使用)-您检查过shmid是否相同吗?您的代码在我的系统上运行良好

只是在它周围添加了一个main(),希望对您有所帮助

 key=9876;
 shmid=shmget(key,SHMSIZE,0666);
 if(shmid<0)
 {
        printf("%s",strerror(errno));
        perror("Error in Shared Memory get statement");
        shmid = shmget(key, SHMSIZE, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH | IPC_CREAT);
        if (shmid == -1)  {
                printf("%s",strerror(errno));
                perror("Error in Shared Memory get statement");
                exit(1);
        }
 }
printf("Shmget() successful %d\n",shmid);
key=9876;
shmid=shmget(键,SHMSIZE,0666);

如果(shmidd)您在运行客户端之前运行服务器吗?并保持服务器运行吗?我试过了,代码对我来说很好。是的。我先运行Compliated server,然后编译客户端,然后发出run命令。我的代码第一次运行,但现在出现了这个错误shmget()失败的事实是“没有这样的文件或目录”仅表示它没有找到具有该键的段(现在是pedantic:not id-对于id,我们通常引用shmget()返回的值,随后使用)-您检查过shmid是否相同吗?您的代码在我的系统上运行良好。您在运行客户端之前运行过服务器吗?并保持服务器运行吗?我尝试过,代码对我来说运行良好。是的。我先运行Compliated server,然后编译客户端,然后发出run命令。我的代码第一次运行,但现在出现此错误shmget()在“没有这样的文件或目录”的情况下失败,这一事实只意味着它没有找到具有该键的段(现在是迂腐的:没有id-使用id我们通常指shmget()返回的值,随后使用)-您检查过shmid是否相同吗?您的代码在我的系统上运行良好。