多个子进程要共享一个结构体数组,如何来实现呢?
发表于 : 2008-09-26 20:59
RT,我是使用共享内存来作的
这是定义的一个结构体
创建共享内存
映射共享内存
但是在映射后对shmp的操作比如
被报[1]+ 段错误 ,是不是不能这样用共享内存呢?那应该怎么实现多个子进程要共享一个结构体数组,还是这种情况下只能使用线程
这是定义的一个结构体
代码: 全选
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);
代码: 全选
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. }