mmap() 将文件或对象映射到内存地址空间。
mmap()必须以PAGE_SIZE为单位进行映射,而内存也只能以页为单位进行,若要映射非PAGE_SIZE整数倍的地址范围,要先进行内存对齐,强行以PAGE_SIZE的倍数大小进行映射。
文件一旦被映射后,调用mmap()的进程对返回地址的访问是对某一内存区域的访问,暂时脱离了磁盘上文件的影响。所有对mmap()返回地址空间的操作只在内存中有意义,只有在调用了munmap()后或者msync()时,才把内存中的相应内容写回磁盘文件,所写内容仍然不能超过文件的大小。
#include <sys/mman.h>
/**
* mmap - 将文件或设备映射到内存空间
* @addr 映射区的开始地址,设置为0时表示由系统决定映射区的起始地址
* @length 映射区的长度,以字节为单位
* @prot 内存保护标志
* @flags 指定映射对象的类型,映射选项和映射页是否可以共享
* @fd 映射文件的描述符
* @offset 被映射对象内容的起始点
*/
void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset);
/**
* munmap - 解除文件或设备与内存的映射关系
* @addr 映射区的开始地址,即调用 mmap()时返回的地址
* @length 映射区的长度,以字节为单位
*/
int munmap(void* addr, size_t length);
/**
* msync - 实现磁盘文件内容与共享内存区中的内容一致,即同步操作
* @addr 映射区的开始地址,即调用 mmap()时返回的地址
* @length 映射区的长度,以字节为单位
* @flags 刷新的参数设置
*/
int msync(void* addr, size_t length, int flags);