LinuxSir.cn,穿越时空的Linuxsir!

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

一个关于共享内存操作的问题,希望高手帮忙下啦,多谢~

[复制链接]
发表于 2010-9-8 21:59:52 | 显示全部楼层 |阅读模式
code:
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <stdio.h>
#include "def.h"

#define BUF_SIZE 1024
#define MY_KEY    30

int main(void)
{
    int i_shmid = 0;
    char *p_shm = NULL;
   
    i_shmid = shmget(MY_KEY, BUF_SIZE, IPC_CREAT);
    if (-1 == i_shmid)
    {
        ASSERT(FALSE);
        return 1;
    }
   
    printf(" The shm_id is %u.\r\n", i_shmid);
   
    p_shm = shmat(i_shmid, 0, 0);

    if ((void *)-1 == p_shm)
    {
        ASSERT(FALSE);
        return 1;
    }
   
    printf(" The share memory address starts at: 0x%x\r\n", p_shm);
   
    return 1;
}

代码就是像上面这样的,就是创建一个共享内存,并且附加到本进程而已,可是在附加的时候总是出错,得到的指针是无效的(0xffffffff),是有什么地方出错了么?

我是比着教材来做的阿~

还有就是我看大家在帖子中贴程序都有一个单独的下拉框,是怎么搞的啊?
 楼主| 发表于 2010-9-8 22:00:35 | 显示全部楼层
这样看起来程序缩进都没了……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-8 22:25:11 | 显示全部楼层
有了新的进展,在创建共享内存的时候,最后的一个参数,如果写成:
(IPC_CREAT | SHM_R | SHM_W)
的话,就可以成功附加,得到共享内存的地址。

猜想是因为如果只是传入了IPC_CREAT作为标志位的话,是无法进行读写操作造成的,仅仅是猜测而已,还是希望有高手来帮忙解答一下哈~
回复 支持 反对

使用道具 举报

发表于 2010-9-8 23:56:59 | 显示全部楼层
不设读写权限的话,就是0000,就是你自己都读不了,所以就没法attach.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-9 23:48:53 | 显示全部楼层
Post by debiannew;2111554
不设读写权限的话,就是0000,就是你自己都读不了,所以就没法attach.


谢啦,看来自己还是猜对,呵呵
回复 支持 反对

使用道具 举报

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

本版积分规则

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