当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 多个子进程要共享一个结构体数组,如何来实现呢?
帖子发表于 : 2008-09-26 20:59 

注册: 2008-03-18 13:23
帖子: 26
送出感谢: 0 次
接收感谢: 0 次
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]+ 段错误 ,是不是不能这样用共享内存呢?那应该怎么实现多个子进程要共享一个结构体数组,还是这种情况下只能使用线程


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 多个子进程要共享一个结构体数组,如何来实现呢?
帖子发表于 : 2008-09-26 21:57 

注册: 2008-09-05 21:42
帖子: 9
送出感谢: 0 次
接收感谢: 1
SHM可以满足多进程共享结构体的需求。

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

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


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


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译