免费注册 查看新帖 |

Chinaunix

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

SystemV 共享内存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-19 16:23 |只看该作者 |倒序浏览
关于  系统 V 共享内存  shmat 返回的值的确定:

网络通信 卷二 :   shmat 返回值是所指定的共享内存在调用的进程的起始地址。
但是我还是看不明白。

比如 2个 进程调用了 共享内存  ,打印出来的 返回值不一样的
但是 如果 用 GBD  调试  这2个进程  显示的地址 是一样的

(gdb) n
17        ilShmid = atoi(argv[1]);
(gdb) n
19        if((ptr = shmat(ilShmid,NULL,0))<0)
(gdb) n
27        printf ("ptr==[%x]\n",ptr);
(gdb) n
ptr==[b7ffe000]               // shmat 返回值
28        printf("read from shmmap --> \n %.1024s\n ",ptr);
(gdb) n
read from shmmap -->
123456helloworld

2个进程都是 打印的  b7ffe000


第2个问题
p=(P *)shmat(shmid, (char *)0, SHM_RND);  //  p 为结构体指针

这句话, 他的返回值,如何确定的! 这样做的目的是什么?

看书 实在有点不明白, 用 gdb 调试 也有点迷糊~~

希望 师傅 们 帮忙 指导一下





















论坛徽章:
0
2 [报告]
发表于 2012-04-19 17:12 |只看该作者
2个进程都是 打印的  b7ffe000

巧合而已,除非你自己设定了起始地址

shmat就是返回共享内存首地址,然后P*类型转换,有什么问题么?

论坛徽章:
0
3 [报告]
发表于 2012-04-19 17:45 |只看该作者
关于第二个问题, 简单点就是 用 (shmid, (char *)0, SHM_RND);   这个参数 的作用是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP