+ -
当前位置:首页 → 问答吧 → 共享内存问题

共享内存问题

时间:2010-08-25

来源:互联网

程序a
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/ipc.h>
  4. #include <sys/shm.h>
  5. #include <memory.h>
  6. #include <unistd.h>
  7. #define SHM_MODE SHM_W|SHM_R
  8. struct ARG
  9. {
  10.         int connfd[10000][50];
  11.         char *connfds[10000][5];
  12. };

  13. int newshm(key_t key,int shmsiae)
  14. {
  15.         int shmid;
  16.         shmid = shmget(key,shmsiae, SHM_MODE|IPC_CREAT);
  17.         if(shmid == -1)
  18.                 printf("newshm error%s\n",key);
  19.         return shmid;
  20. }

  21. char * getshm(int shmid)
  22. {
  23.         char *ptr;
  24.         ptr =(char*)shmat(shmid,0,0);
  25.         if(ptr == (char*)-1)
  26.                 printf("getshm error%s\n",shmid);
  27.         return ptr;
  28. }

  29. int main(int argc,char *argv[])
  30. {
  31.         int  shmid,i;
  32.         char *shmptr;
  33.         shmid = newshm(89,52428800);
  34.         shmptr = getshm(shmid);
  35.         struct ARG *arg = (struct ARG *)shmptr;
  36. //初始化数据
  37.         for(i=0;i<10000;i++)
  38.         {
  39.                 arg->connfd[i][0]=1;
  40.                 arg->connfd[i][1]=1;
  41.                 arg->connfd[i][2]=1;
  42.         }
  43.         return 0;
  44. }
复制代码
程序b
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/ipc.h>
  4. #include <sys/shm.h>
  5. #include <memory.h>
  6. #include <unistd.h>
  7. #define SHM_MODE SHM_W|SHM_R
  8. struct ARG
  9. {
  10.         int connfd[10000][50];
  11.         char *connfds[10000][5];
  12. };

  13. int newshm(key_t key,int shmsiae)
  14. {
  15.         int shmid;
  16.         shmid = shmget(key,shmsiae, SHM_MODE|IPC_CREAT);
  17.         if(shmid == -1)
  18.                 printf("newshm error%s\n",key);
  19.         return shmid;
  20. }

  21. char * getshm(int shmid)
  22. {
  23.         char *ptr;
  24.         ptr =(char*)shmat(shmid,0,0);
  25.         if(ptr == (char*)-1)
  26.                 printf("getshm error%s\n",shmid);
  27.         return ptr;
  28. }

  29. int main(int argc,char *argv[])
  30. {
  31.         int  shmid,i;
  32.         char *shmptr;
  33.         shmid = newshm(89,52428800);
  34.         shmptr = getshm(shmid);
  35.         struct ARG *arg = (struct ARG *)shmptr;
  36.         while(1)
  37.         {
  38.                 for(i=0;i<10000;i++)
  39.                 {
  40.                         if(arg->connfd[i][0])
  41.                         {
  42.                                 printf("==%i==%i===",arg->connfd[i][0],arg->connfd[i][6]);
  43.                         }
  44.                 }
  45.                 usleep(3000000);
  46.         }
  47.         return 0;
  48. }
复制代码
两个程序通过gcc编译后 启动程序a初始化共享内存
在启动程序b却读不到任何数据,说明两个程序的内存没被共享,要怎么解决这个问题呢?

作者: jd808   发布时间: 2010-08-25

怎么又两个shmget函数??b程序只要shmat就行了。。

作者: pengjianbokobe   发布时间: 2010-08-25

没shmid怎么shmat???

作者: jd808   发布时间: 2010-08-25