mmap(内存映射,memory map)函数的作用是建立一段内存,使它能够被两个或者更多的程序读写。一个程序对它所做的修改可以被
其他程序看见。
这一功能还可以用在文件的处理上。你可以使某个磁盘文件的全部内容看起来就像是内存中的一个数组。如果文件由记录组成,而这些记录
又能够用c语言中的结构来描述的话,你就可以通过访问结构数组对文件的内容进行修改。
mmap函数创建一个指向一段内存区域的指针,该指针将与文件的内容相关联,而文件则是通过一个打开的文件描述符来访问。
#include<sys/mman.h>
void *mmap(void *addr,size_t len,int prot,int flags,int fildes,off_t off);
你可以通过传递off参数来改变经共享内存段访问的文件中数据的起始偏移值。打开的文件描述符由fildes参数给出。可以访问的数据量
(即内存段的长度)由len参数给出。
通过addr参数请求使用某个特定的内存地址。如果它的取值为0,指针将自动分配。
prot参数用来设置内存段的访问权限。通常由下面按位OR结果:
PORT_READ:允许读该内存段
PORT_WRITE:允许写该内存段
PORT_EXEC:允许执行该内存段
PORT_NONE:该内存不能被访问
flags参数控制程序对该内存段的改变所造成的影响,
MAP_PRIVATE:内存段是私有的,对他的修改只在此局部范围内有效
MAP_SHARED:把对该内存的修改保存到磁盘文件中
MAP_FIXED:该内存段必须位于addr指定的地址处
msync函数把该内存段的某个部分或整段中的修改写回到被映射的文件中
#include <sys/mman.h>
int msync (void *addr,size_t len,int flags);
内存段需要修改的部分由作为参数传递过来的起始地址addr和长度len确定。flags参数控制执行修改的具体方式,
MS_ASYNC:采用异步写方式
MS_SYNC:采用同步写方式
MS_INVALIDATE:从文件中读回数据
munmap函数的作用是释放内存段
#include <sys/mman.h>
int munmap (void *addr, size_t len);