c/c++ unix c/linux c 嵌入式 共享内存

发布网友 发布时间:2022-04-24 16:30

我来回答

3个回答

热心网友 时间:2022-04-14 16:47

错误比较不明显,最要的错误是int shmid=shmget(key,4,IPC_CREAT|IPC_EXCL|0660);这一行之中的标志位IPC_EXCL确保创建新的唯一的共享内存,如果已经存在(也就是说之前使用了一次),他将返回错误,故将这个标志位去掉,其他的不是很严重,忽略的是没有最后删除共享内存,而只是分离了共享内存。修改代码如下:

#include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/ipc.h>
 #include <sys/shm.h>
 int main()
 {
    key_t key=ftok(".",100);
     if(key==-1){
         perror("ftok");
         return -1;
     }
     int shmid=shmget(key,0,0);
     if(shmid==-1)
     {
     perror("shmget");
     exit(-1);
      } 
     void*p=shmat(shmid,0,0);
      if(p==(void*)-1)
{perror("shmat");
exit(-1);
}
    int *pi=p;
      printf("*pi=%d\n",*pi);
      shmdt(p);
  }

#include <stdio.h>
  #include <stdlib.h>
   #include <unistd.h>
   #include <sys/ipc.h>
   #include <sys/shm.h>
   
   int main()
   {
       key_t key=ftok(".",100);
      if(key==-1){
          perror("ftok");
          return -1;
      }
      int shmid=shmget(key,4,IPC_CREAT|0660);
     if(shmid==-1)
    {
    perror("shmget");
    exit(-1);
    }
      void*p=shmat(shmid,0,0);
      if(p==(void*)-1)
     {    perror("shmat");
      exit(-1);
      }
      int *pi=p;
      *pi=100;
      shmdt(p);
  }

热心网友 时间:2022-04-14 18:05

我用你的代码是可以读出100的,另外,(void*)-1是想表达什么?NULL?

热心网友 时间:2022-04-14 19:40

程序2运行完,即退出了

参考别人的分析

http://blog.csdn.net/ruizeng88/article/details/6702346

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com