免费注册 查看新帖 |

Chinaunix

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

共享内存数据前后不一致了。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-19 15:24 |只看该作者 |倒序浏览
两个程序:
//shm.c:创建共享内存并修改

#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>

typedef struct shm_St{
        int i;
        char *s;
        char c;
}shmST;

main()
{
        shmST *st1;
        int key = 0x11011;
        int mId;
        if((mId = shmget(key,1024,IPC_CREAT|0666|IPC_EXCL)) == -1)
                {
                printf("fail to create share memory...\n");
                return;
                }
        char * addr;
        addr = (char *)shmat(mId,0,0);
        st1 = (shmST *)addr;
        st1->i = 1000;
        st1->s = "now in share memory...";
        st1->c = 'P';

        printf("%d\n%s\n%c\n",st1->i,st1->s,st1->c);
        return;
}

///////////
//shm1.c:连接共享内存读取数据
#include<sys/shm.h>
#include<sys/ipc.h>

typedef struct shm_st{
        int i;
        char *s;
        char c;
}shmST;
main()
{
        shmST *s1;
        int key = 0x11011;
        int mId = shmget(key,1024,0666);
        char *addr = (char *)shmat(mId,0,0);
        s1 = (shmST *)addr;
        printf("%d\n%s\n%c\n",s1->i,s1->s,s1->c);
        return;
}
为什么shm1.c输出结果是:
1000

P
中间的字符串跑哪去了呢,调试结果地址是一样的,结果中间字符串值为“\0002”?shm.c的输出是对的。。。

论坛徽章:
0
2 [报告]
发表于 2007-10-19 15:56 |只看该作者
也会出这样的错误?
指针是无法共享的。如果你需要,把结构中间那个指针换成一个字符数组。

论坛徽章:
0
3 [报告]
发表于 2007-10-19 16:08 |只看该作者
呵呵,我的失误,已经提醒过自己很多次指针不分配空间了。。。还是没掌握啊~~~- -

论坛徽章:
0
4 [报告]
发表于 2007-10-19 16:14 |只看该作者
原帖由 edward_fu 于 2007年10月19日 16:08 发表
呵呵,我的失误,已经提醒过自己很多次指针不分配空间了。。。还是没掌握啊~~~- -

这不是问题所在。
你那个字符串常量,肯定占用空间了。

论坛徽章:
0
5 [报告]
发表于 2007-10-19 16:24 |只看该作者
原帖由 hohoxu_hao115 于 2007-10-19 16:14 发表

这不是问题所在。
你那个字符串常量,肯定占用空间了。

我觉得这个字符串常量并不在共享内存中,而是应该属于程序shm.c的数据段内,也就是他是shm.c独有的,所以shm1.c运行的时候是读不出来的,所以才会空白的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP