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

软件和网站开发以及相关技术探讨
回复
Einsxu
帖子: 26
注册时间: 2008-03-18 13:23

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

#1

帖子 Einsxu » 2008-09-26 20:59

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]+ 段错误 ,是不是不能这样用共享内存呢?那应该怎么实现多个子进程要共享一个结构体数组,还是这种情况下只能使用线程
picktracy
帖子: 9
注册时间: 2008-09-05 21:42

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

#2

帖子 picktracy » 2008-09-26 21:57

SHM可以满足多进程共享结构体的需求。

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

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


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