免费注册 查看新帖 |

Chinaunix

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

linux c下共享内存问题 -- 两个进程如何获得相同共享内存地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-28 10:58 |只看该作者 |倒序浏览
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define SHM_KEY         98761234
#define SHM_SIZ         1024*1024
int main()
{
        void *paddr;
        int shm_id;

        shm_id = shmget(SHM_KEY, SHM_SIZ, IPC_CREAT | 0666);
        if (shm_id < 0) return -1;

        paddr = shmat(shm_id, NULL, 0);

        printf("paddr : %x\n", paddr);
        sleep(10);

        return 0;
}

在FC3下运行,每次获得的paddr地址都相同,而在as3,fedora11下每次得到的paddr不同,
如果才能像FC3下paddr获取的地址都相同?

论坛徽章:
0
2 [报告]
发表于 2010-04-28 12:27 |只看该作者
不行吧 

可以使用偏移地址 即程序中保存地址时存的是相对于paddr的偏移量
访问该地址时用paddr加上该偏移量获得实际地址

论坛徽章:
0
3 [报告]
发表于 2010-04-28 13:15 |只看该作者
这样啊,谢谢了,估计也就只能这种方法了,特别怪,在fc3下面两个进程就能够获得相同的共享内存地址

不知道fc3系统设置了什么,能够获得这种效果

论坛徽章:
0
4 [报告]
发表于 2010-04-28 13:31 |只看该作者
不理解你为什么关系paddr本身
你使用的应该是paddr地址的内容

论坛徽章:
0
5 [报告]
发表于 2010-04-28 14:09 |只看该作者
设计环境:
   现在有4个共享内存,命名为A,B,C,D
    其中A为管理,BCD挂在A上,也就是A中有成员要指向BCD的
   在使用BCD的内容时,是通过A获取BCD的地址

所以需要知道paddr的值,通过paddr的值才能知道paddr的内容

论坛徽章:
0
6 [报告]
发表于 2010-04-28 14:43 |只看该作者
只能像2楼说的那样使用偏移量

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
7 [报告]
发表于 2010-04-28 18:09 |只看该作者
mmap不是可以FIXED么?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
8 [报告]
发表于 2010-04-28 18:14 |只看该作者
不太明白,应该key一样地址就一样吧?难道说fc11上面即使两个不同进程key一样,shmat取得的地址都不一样么??内容呢?地址不一样的话里面的内容会不会一样?会不会只是映射到不一样的地方去了?

论坛徽章:
0
9 [报告]
发表于 2010-04-28 18:20 |只看该作者
我一般都是用配置来实现访问同一共享内存

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP