mmap 可以把磁盘文件都一部分直接映射到内存,这样文件中的位置就有量对应到内存地址,可以用指针对文件操作了
void *mmap(void *addr, size_t len, int prot, int flag, int filedes, off_t off);
int munmap(void *addr, size_t len);
addr 一般参数尾NULL,内核会自动分配,len是需要映射的那一部分长度,off是从文件的什么位置开始,必须是页的整数倍,filedes 是文件的描述符;
port 参数有4种取值:
PROT_EXEC 可执行
PROT_READ 可读
PROT_WRITE 可写
PROT_NONE 不可访问
flag 参数很多种,这里说2种:
MAP_SHARED 多进程对同一文件共享
MAP_PRIVATE 多进程不共享
mmap成功返回映射都首地址,出错返回常数MAP_FAILED;
进程终止,映射解除,也可以调用munmap解除,成功返回0,出错返回-1;