Posix共享内存区

来源:互联网 发布:深圳云知科技 董事长 编辑:程序博客网 时间:2024/05/02 17:29

Posix提供了两种在无亲缘关系进程间共享内存区的方法:

(1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。

(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。

者两种方法多需要调用mmap,差别在于作为mmap的参数之一的描述符的获取手段。

Posix共享内存区涉及以下两个步骤要求:

(1)指定一个名字参数调用shm_open,以创建一个新的共享内存区对象或打开一个已经存在的共享内存区对象。

(2)调用mmap把这个共享内存区映射到调用进程的地址空间。

注意:mmap用于把一个内存区对象映射到调用进程地址空间的是该对象的一个已经打开描述符。

1、shm_open

#include ​

int shm_open(const char *name, int oflag, mode_t mode);

​1)name    共享内存区的名字

2)oflag    标志位

3)mode    权限位,它指定O_CREAT标志的前提下使用。

​2、shm_unlink

int shm_unlink(const char *name); ​

删除一个共享对象的名字

3、ftruncate​

int ftruncate(int fd, off_t length);

将参数fd指定的文件大小改为参数length指定的大小

普通文件或共享内存区对象的大小都可以通过调用ftruncate修改

​4、fstat

int fstat(int fd, struct stat *buf); 

查看状态

当打开一个已存在的共享内存区对象时,我们可调用fstat来获取有关该对象的信息

对于普通文件stat结构可以获得12个以上的成员信息,然而当fd指代一个共享内存区对象时,只有四个成员含有信息。

struct stat

{

mode_t st_mode;

uid_t st_uid;

gid_t st_gid;

off_t st_size;

};

0 0
原创粉丝点击