mmap函数提供了一种高效的方式对内存进行访问,其成功则会直接返回一个映射的起始指针,也可以对文件进行直接访问,而不需要read()或write()函数等进行操作。
函数所在头文件为<sys/mma.h>
其形式为:void *mmap(void *start, size_t length, int port, int *flag, int fd, off_t offset)
其中start 为映射区的起始地址,如果想要自动选择的话,要用NULL;
length:映射区的字节长度,自动按页取整,这里默认4k为一页。
port:访问权限,包括:
PROT_READ - 可读
PROT_WRITE - 可写
PROT_EXEC - 可执行
PROT_NONE - 不可访问
flag:映射标志,包括:
MAP_ANONYMOUS - 匿名映射,将虚拟内存映射到物理内存,函数的最后两个参数fd和offset被忽略
MAP_PRIVATE - 私有映射,将虚拟内存映射到文件的内存缓冲区中而非磁盘文件
MAP_SHARED - 共享映射,将虚拟内存映射到磁盘文件中
MAP_DENYWRITE - 拒写映射,文件中被映射区域不能存在其它写入操作
MAP_FIXED - 固定映射,若在start上无法创建映射,则失败(无此标志系统会自动调整)
MAP_LOCKED - 锁定映射,禁止被换出到换页文件
offset :文件偏移量,自动按页对齐
mmap函数成功返回相应的起始地址