函数原型
void* mmap(void* addr, size_t length,int prot,int flag,int fd,off_t offset)
返回值:成功返回映射区的首地址,失败返回MAP_FAILED宏
ps:该函数出错几率大,切记要检查返回值。
函数参数
addr:建立映射区的首地址,由linux内核指定,使用时直接传NULL
length:欲创建映射区的大小
prot:映射区权限 PORT_READ、PORT_WRITE、PORT_READ | PORT_WRITE
flag:标志为参数(常用于设定更新物理区域,设置共享、创建匿名映射区)
MAP_SHARED:会将映射区所做的操作反映到物理设备(磁盘)上
MAP_PRIVATE:映射区所做的修改不会反映到物理设备
fd:用来建立映射区的文件描述符
offset:映射文件的偏移 (4k的整数倍)
下面展示一些 内联代码片
。
// A code block
#include<sys/mman.h>
p = mmap(NULL,len,PROT_READ | PORT_WRITE,MAP_SHARED,fd,0)
if(MAP_FAILED == p)
exit(1)
munmap(p,len) // 配套使用
注意事项
//当MAP_SHARED时,创建映射区的权限要小于等于打开文件的权限(出于对映射区的保护);而MAP_PRIVATE时则无所谓。
//映射区创建的过程中隐含着一次读操作。
//munmap第一参数必须为映射区首地址。
//映射区大小必须小于等于文件大小。
//映射区与文件关闭无关,只要映射建立成功,文件可以立即关闭。
//映射文件大小不能为0,即用于创建映射区的文件必须又实际大小。