Posix提供了两种在无亲缘关系进程间共享内存区的方法:函数
(1)内存映射文件:先有open函数打开,而后调用mmap函数把获得的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。ui
(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也能够是文件系统中的一个路径名),而后调用mmap将返回的描述符映射到当前进程的地址空间。对象
者两种方法多须要调用mmap,差异在于做为mmap的参数之一的描述符的获取手段。进程
Posix共享内存区涉及如下两个步骤要求:内存
(1)指定一个名字参数调用shm_open,以建立一个新的共享内存区对象或打开一个已经存在的共享内存区对象。权限
(2)调用mmap把这个共享内存区映射到调用进程的地址空间。map
注意:mmap用于把一个内存区对象映射到调用进程地址空间的是该对象的一个已经打开描述符。方法
一、shm_openim
#include margin
int shm_open(const char *name, int oflag, mode_t mode);
1)name 共享内存区的名字
2)oflag 标志位
3)mode 权限位,它指定O_CREAT标志的前提下使用。
二、shm_unlink
int shm_unlink(const char *name);
删除一个共享对象的名字
三、ftruncate
int ftruncate(int fd, off_t length);
将参数fd指定的文件大小改成参数length指定的大小
普通文件或共享内存区对象的大小均可以经过调用ftruncate修改
四、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;
};