今天在了解内存共享是遇到mmap函数, 随便也了解一下它。
函数原型:
#include //头文件
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
函数作用是映射一个文件或者设备到内存空间。
void munmap(void *addr, size_t length); //收回映射空间
详细描述
mmap()在调用进程的虚拟地址空间中创建一个新映射。addr是新映射的起始地址,一般我们都指定NULL,表示由kernel自己选择创建新映射的地址。length是映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。prot表示被映射内存渴望的保护位即访问权限,可选如下值:
PROT_EXEC Pages may be executed.
PROT_READ Pages may be read.
PROT_WRITE Pages may be written.
PROT_NONE Pages may not be accessed.
flags可选值:
MAP_SHARED 共享这个映射。一般用了实现内存共享。表示映射的更新对映射此文件的其他进程可
见,并传递到底层文件。再你调用msync()或munmap之前,更新并不会被同步到
文件。
MAP_PRIVATE 创建一个私有的写时拷贝映射。映射的更新对映射此文件的其他进程不可见,并不传
递到底层文件。
MAP_ANONYMOUS 匿名内存映射。这时fd和offset可以不用绑定。
还有很多其他flags,这里只简单介绍几个常用的。
返回值
成功,返回映射区间的地址指针。失败,返回MAP_FAILED, 并且errno也被设置。
阅读(2362) | 评论(0) | 转发(0) |