mmap
Linux利用mmap函数允许程序创建共享内存,建立一段可以被多个程序读写的内存,一个程序的修改可以被其他程序看见。还可以用在文件的处理上,通过带特殊权限集的虚拟内存段实现,对虚拟内存段的读写会使操作系统读写磁盘文件中的对应部分。
#include <sys/mman.h>
void* mmap(void* addr,size_t len,int prot,int flags,int fildes,off_t off);
mmap函数创建一个指向一段内存区域的指针,该内存区域与通过一个打开的文件描述符访问的文件的内容相关联。
off用来改变文件中数据的起始偏移值,
len指定可以访问的数据量,
addr可以请求某个特定的内存地址,取值为零时则指针自动分配。
prot参数用于设置内存段的访问权限,按位或,PROT_READ:允许读,PROT_WRITE:允许写,PROT_EXEC:允许执行,PROT_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);
释放分配的内存段。