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

2024-12-04 13:02:31
推荐回答(3个)
回答1:

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

#include 
 #include 
 #include 
 #include 
 #include 
 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 
  #include 
   #include 
   #include 
   #include 
   
   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);
  }

回答2:

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

回答3:

程序2运行完,即退出了

参考别人的分析

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