android之binder学习攻克

[mmap]系统调用

2018-12-18  本文已影响0人  小码弟

void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset)
最近在写网络编程项目时用到了这个函数,在这里简单记录一下。

描述:mmap()系统调用把fd文件描述符对象从offset位置开始(字节为单位),映射到以addr为起始地址的页面。

一、参数解释

二、返回值

一旦调用成功,mmap返回被映射区域的指针,进程可以对这个指针进行读写。根据flags指定的模式,这些读写有可能被其他进程觉察到,由此实现基于共享内存的进程通信。

三、使用mmap用于共享内存的两种方式

  1. 匿名映射:把fd置为-1,指涉特殊文件,flags置为MAP_ANON,适用于具有亲缘关系的进程间通信
  2. 有名映射:fd大于0,指涉普通文件,适用于任何进程间的通信。

四、msync(void* addr, size_t len, int flags)

一般来说,进程对地址空间中共享内容的修改不会立即写入磁盘,而是等待munmap的调用后才执行写磁盘操作,而msync允许我们手工指定同步行为的发生。

五、int munmap(void* addr, size_t len)

解除进程空间某个地址(就是mmap返回的那个地址)和内核某个文件(就是mmap中的那个fd)之间的映射关系。

上一篇 下一篇

猜你喜欢

热点阅读