您的位置:首页 > 移动开发

Memory-Mapped I/O

2016-01-13 16:07 525 查看
Memory mapped I/O就是把磁盘上的file映射到内存上,当我们从内存上fetch byte时,对应的file就被读取。同样的,当我们在内存上存储字节的时候,对应的file就被写入。这就让我们不需通过read和write系统调用而去操作I/O。

  mmap内存映射建立一段可以被多个进程读写的内存段。共享内存。

  mmap函数作用是告诉内核把给定的文件file映射到内存的一块空间,mmap函数原型如下:

#include <sys/mmam.h>
void *mmap(void *addr, size_t len, int prot,
int flag, int fields, off_t off);


  函数返回值就是the starting address of the mapped area。

  参数addr代表被映射到内存的地址。一般把addr设置成为0,让操作系统自己去选择该映射到内存的那个地址上。

  参数fields就是要被映射的文件的文件描述符。在把这个文件映射到内存空间之前,我们必须先open这个文件描述符。

  参数len代表the number of bytes to map。

  参数off is the starting offset in the file of the bytes to map。

  参数prot的值和代表的含义如下表格,prot用于设置内存段的访问权限

  
PROT_READRegion can be read
PROT_WRITERegion can be write
PROT_EXECRegion can be execute
PROT_NONERegion cannot be accessed
  参数flag代表内存映射区的属性:

MAP_FIXED   内存段必须位于addr指定的位置

MAP_SHARED  内存段是共享的,对内存段的修改保存到磁盘文件中

MAP_PRIVATE  内存段是私有的,对内存段的修改只对本进程内部有效

  msync函数的作用:把在内存段的某个部分或整段中的修改写回到映射的文件中。

int msync(void * addr, size_t len, int flag);

flag控制执行修改的具体方式:

MS_ASYNC  采用异步写方式

MS_SYNC  采用同步写方式

MS_INVALIDATE  从文件中读回数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: