LinuxSir.cn,穿越时空的Linuxsir!

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

关于写建立共享内存的函数

[复制链接]
发表于 2006-12-29 15:04:29 | 显示全部楼层 |阅读模式
题目是要写2个函数,原型如下:
int sux_createshm(char * name, int * fd, int flag);
//创建共享内存 1成功 -1失败
//用POSIX共享内存基质

int sux_openshm(int fd,char **p,off_t size) ;
//映射共享内存 1成功 -1失败



但是fd 不是shm_open()的返回值吗,怎么函数参数里要有他的指针形式呢?
而*p也是mmap()的返回值,为什么他的指针也要作为函数参数呢?

那究竟这2个函数要怎么写呢,谁帮我解答下,谢谢了
发表于 2006-12-29 17:37:11 | 显示全部楼层
显然是要你通过这两个指针来返回那两个东东给函数调用者啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-30 11:55:37 | 显示全部楼层
int sux_createshm(char * name, int * fd, int flag)
{
        *fd = shm_open(name,flag,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);       
        if (shmid == -1)
        {
                printf("creat shm error!\n");
                return -1;
        }
        else
        {
                return 1;
        }
}

int sux_openshm(int fd,char **p,off_t  size)
{
        if (ftruncate(fd,size) == -1)
        {
                printf("set size error!\n");
                return -1;
        }
        *p = mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
        if (*p == (void*)-1)
        {
                printf("mmap error!\n");
                return -1;
        }
        else
                return 1;       
}



谢谢

那这样写对不
回复 支持 反对

使用道具 举报

发表于 2006-12-30 13:03:13 | 显示全部楼层
对不对最好还是自己写几句测试代码试一试。
回复 支持 反对

使用道具 举报

发表于 2006-12-30 22:13:11 | 显示全部楼层
哇,好多函数没见过(俺新手,莫怪),呵呵,yuyudi可否解释一下各函数参数的意思呢?
先让我猜测一下:
int sux_createshm(char * name, int * fd, int flag)
name是开辟的内存区域名字?
fd是描述符,但不知……?
flag是对共享内存操作的标志位?

shmid == -1 中的 shmid是什么?

以下不胡猜了,熟手指点一下:

int sux_openshm(int fd,char **p,off_t size)
shm_open()
ftruncate()
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-31 10:04:14 | 显示全部楼层
恩恩恩,基本这样的

噢错了,那里忘改了 shmid应该是*fd

后来改了的,那里忘掉了...呵呵
回复 支持 反对

使用道具 举报

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

本版积分规则

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