mmap
文件映射
文件存储在磁盘上
使用mmap可以将文件当成内存去处理
函数原型:void*mmap(void *addr,size_t length,int prot,int flags,int fd,off_t offset);
参数:addr: 映射的地址一般NULL
length:需要映射的空间大小
prot:申请到的这块缓冲区的权限 PROT_READ PROT_WRITE
flags:申请的空间是否被共享 MAP_SHARED MAP_PRIVATE
fd:等待映射的文件描述符
offset:映射文件的偏移量 必须是4k的整数倍
mmap用于父子进程间通信
![](https://img-blog.csdnimg.cn/img_convert/6186e1ba432f5268249e221f415fc9e1.png)
mmap使用注意事项:
用于场景mmap内存的文件大小不能为0
想要使用mmap进行进程间的通信,必须指定flaggs = MAP_SHARED
用于映射的文件会在映射期间将文件映射部分的数据拷贝进内存
当flags参数指定为MAP_SHARED时,堆内存的操作会反应到文件上
当flags参数指定为MAP_SHARED时,文件映射区的权限应该小于等于文件的打开权限,用于映射的文件打开时至少需要拥有读权限
offset必须是4096的整数倍
fd映射之后可以随时关闭
mmap用于不相关进程间的通信
wmmap
![](https://img-blog.csdnimg.cn/img_convert/853a2b948c83a20958b1cf15e1b8d732.png)
rmmap
![](https://img-blog.csdnimg.cn/img_convert/adf3b62c43378e11d3f305de27d73652.png)
匿名映射
不适用真是的文件创建映射区 ubuntu中有一个宏MAN_ANON,用于创建匿名映射
![](https://img-blog.csdnimg.cn/img_convert/73be3e77f3d67412419c2af1f7482b0d.png)
注意:匿名映射只用于关联进程间的通信 可以使用/dev/zero设备文件创建匿名映射