mmap函数创建映射区
函数原型:
void *mmap(void *addr, size_t length, int port, int flags, int fd, off_t offset);
int munmap(void *addr, size_t length);
头文件:
#include <sys/mman.h>
retrun value:
成功: 返回创建的映射区首地址.
失败: MAP_FAILED宏.
参数:
addr: 建立映射区的首地址,由linux内核指定.使用时,直接传递NULL.
length: 欲创建映射区的大小.
prot: 映射区权限: PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE
flags: 标志位参数(常用于设定更新物理区域,设置共享,创建匿名映射区)
MAP_SHARED: 会将映射区所做的操作反映到物理设备(磁盘)上.
MAP_PRIVATE: 映射区所做的修改不会反映到物理设备上.
fd: 用来建立映射区的文件描述符.
offset: 映射文件的偏移(4k的整数倍).
注意:
1> 当MAP_SHARED时:
1. 创建映射区的权限要小于等于打开文件权限(出于对映射区的保护).
2. 映射区创建的过程中隐含着一次对文件的读操作.
而MAP_PRIVATE无所谓,因为mmap中的权限是对内存的限制.
2> offset(偏移量) 必须是4k的整数倍.
3> mmap创建映射区出错概率非常高,一定要检查返回值,确保映射区建议成功再进行后续操作.
文件描述符先关闭,对mmap映射没有影响.
例:通过映射区多进程拷贝大文件.