Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145717
  • 博文数量: 25
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 232
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-04 16:25
文章分类

全部博文(25)

文章存档

2019年(1)

2018年(1)

2017年(14)

2015年(9)

我的朋友

分类: LINUX

2018-02-26 14:53:54

今天在了解内存共享是遇到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) |
给主人留下些什么吧!~~