LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1198|回复: 2

关于shmget的问题。

[复制链接]
发表于 2009-11-3 18:08:39 | 显示全部楼层 |阅读模式
int segment_id  = 0;
int
main()
{
    int size = 1024;
    int pid = fork();
    if (pid == 0)
    {
        segment_id = shmget(IPC_PRIVATE, size,
                                                 S_IRUSR | S_IWUSR);
        char *shared = (char *)shmat(segment_id, NULL, 0);
        sprintf(shared, "Operating system concepts!\n");
        shmdt(shared);
    }
    else
    {
        int stat;
        waitpid(pid, &stat, 0);
        char *attach = shmat(segment_id, NULL, S_IRUSR|S_IWUSR);
        printf("%s\n", attach);
        shmctl(segment_id, IPC_RMID, NULL);
    }
    return 0;
}
请问我在子进程里使用shmget,并向该区域写字符串,为何在父进程里读取不到该字符串呢?
请尽量详细说明。
谢谢!
发表于 2009-11-4 09:25:26 | 显示全部楼层
加个同步看看
回复 支持 反对

使用道具 举报

发表于 2009-11-4 09:41:01 | 显示全部楼层
两个进程中都要使用 shmget。

你现在的情况,父进程根本没有取到正确的 handle,segment_id = 0 ,怎么可能取到。

所以,shmget 要放到 fork 之前。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表