免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6516 | 回复: 13
打印 上一主题 下一主题

共享内存和结构体数组如何连接? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-27 16:29 |只看该作者 |倒序浏览

  1.      struct message{
  2.                char     name[10];
  3.                char     addr[20];
  4.                int        age;
  5.                 }
  6. main()
  7. {
  8.        struct message    information[10];
  9.        int       shmid;
  10.        struct message    *p;
  11.    
  12.        shmid =  shmget((key_t)1000,IPC_CREAT|0666);
  13.        memcpy(information[0].name,"xuwenli",7);
  14.        memcpy(information[0].addr,"beijing",7);
  15.        information[0].age  = 100;
  16.       p  =  (struct message *)shmat(shmid,0,0);
  17.       //**********************************//
  18.       这里要将共享内存的地址和结构体数组的地址连接起来。
  19.      information = p ;  // 出错啦!!!
  20.      怎么解决比较好哦???
  21.      谢谢啦!!!
  22.    
  23.   
复制代码

论坛徽章:
0
2 [报告]
发表于 2003-02-27 16:53 |只看该作者

共享内存和结构体数组如何连接?

是两块内存,你要怎么连?
你的目的是什么?

论坛徽章:
0
3 [报告]
发表于 2003-02-27 16:59 |只看该作者

共享内存和结构体数组如何连接?

呵呵,应该先申请好共享内存绑到一个指针上去再把内容放到共享内存在去,至于怎么放我刚发一个贴子http://www.chinaunix.net/forum/viewtopic.php?t=24315

论坛徽章:
0
4 [报告]
发表于 2003-02-28 08:36 |只看该作者

共享内存和结构体数组如何连接?

struct message    information[10];
       改成
       struct message    *information;

然后把共享内存中的前10 个struct message    类型看成是information数组的就可以

论坛徽章:
0
5 [报告]
发表于 2003-02-28 09:24 |只看该作者

共享内存和结构体数组如何连接?

我没明白。我的意思就是有一个结构体message类型的数组,这个数组是10个长度的。一个进程把这个结构体数组填满值,然后放入到共享内存中,由另一个进程读出。我现在不知道怎么才能把共享内存的地址指向
结构体数组。谢谢.
无双斑竹说的有点差异吧,我觉得:)
struct message information[10]
是我想定义的结构体数组。
struct message information
则变成了结构体message类型的指针啦。

论坛徽章:
0
6 [报告]
发表于 2003-02-28 09:34 |只看该作者

共享内存和结构体数组如何连接?


     information = p ;  // 出错啦!!!

当然会出错
因为information 不是一个指针
并且是在程序的栈中分配

所以不能改变它的地址
也不能使它共享给其它进程

我说的意思就是如果必须把变量放在共享内存中
才可以被共享

论坛徽章:
0
7 [报告]
发表于 2003-02-28 09:40 |只看该作者

共享内存和结构体数组如何连接?

information 不就等于 &information[0]吗,也就是数组information
的地址啊?你能不能写一小小小段代码给偶看看啦?谢谢啦!!!

论坛徽章:
0
8 [报告]
发表于 2003-02-28 09:45 |只看该作者

共享内存和结构体数组如何连接?

指针可以改变它指向的地址
但是数组不可以改变它的地址

这就是它的不同

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2003-02-28 09:52 |只看该作者

共享内存和结构体数组如何连接?

可以将
  1. information = p ;  // 出错啦!!!
复制代码

改成
  1. memcpy( information, p, sizeof(information) )
复制代码

就可以了。

论坛徽章:
0
10 [报告]
发表于 2003-02-28 10:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP