Linux中mmap函数的使⽤
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:该内存段不可访问。
linux怎么读文件内容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);
释放分配的内存段。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论