分页: 1 / 1

多个子进程要共享一个结构体数组,如何来实现呢?

发表于 : 2008-09-26 20:59
Einsxu
RT,我是使用共享内存来作的
这是定义的一个结构体

代码: 全选

   1. struct chat_struct{
   2.         int sock_fd;
   3.         char user_id[20];
   4.         struct client_cmd{
   5.                 int cmd_types;
   6.                 char user_id[20];
   7.         }cmd;
   8.         char buffer[MAXLINE];
   9.         int slot_status;
  10. };
创建共享内存

代码: 全选

shmid=shmget(SHM_KEY,MAXUSERS*sizeof(struct chat_struct),0666|IPC_CREAT);
映射共享内存

代码: 全选

shmp=(struct chat_struct *)shmat(shmid,NULL,0);
但是在映射后对shmp的操作比如

代码: 全选

   1. for(i=0;i<MAXUSERS;i++)
   2.         {
   3.                 (shmp+i*chat_struct_len)->slot_status=OFF;
   4.                 (shmp+i*chat_struct_len)->sock_fd=-1;
   5.                 (shmp+i*chat_struct_len)->cmd.cmd_types=-1;
   6.         }
被报[1]+ 段错误 ,是不是不能这样用共享内存呢?那应该怎么实现多个子进程要共享一个结构体数组,还是这种情况下只能使用线程

Re: 多个子进程要共享一个结构体数组,如何来实现呢?

发表于 : 2008-09-26 21:57
picktracy
SHM可以满足多进程共享结构体的需求。

出现段错误本质是内存访问违例,造成的原因可能多种多样。

仔细看看SHM的man,仔细找找程序问题。


话说SHM只是众多IPC中的一种,多进程间共享数据方法太多了。