UNIX环境高级编程:存储映射I/O(mmap函数)
三、mmap()及其相关系统调用 mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访 问普通内存一样对文件进行访问,不必再调用read(),write()等操作。 mmap函数把一个文件或一个Posix共享内存区对象映射到调用进程的地址空间。使用该函数有三个目的: (1)使用普通文件以提供内存映射I/O; (2)使用特殊文件以提供匿名内存映射; (3)使用shm_open以提供无亲缘关系进程间的Posix共享内存区。 #include <sys/mman.h> void *mmap(void *addr,size_t len,int prot,int flags,int fd,off_t off); 其中addr可以指定描述符fd应被映射到的进程内空间的起始地址。它通常被指定为一个空指针,这样告诉内核自己去选择起始地址。无论哪种情况下,该函数的返回值都是描述符fd所映射到内存区的起始地址。 注意:fd指定要被映射文件的描述符,在映射该文件到一个地址空间之前,先要打开该文件。 同时,fd可以指定为-1,此时须指定flags参数中的MAP_ANON,表明进行的是匿名映射(不涉及具体的文件名,避免了文件的创建及打开,很显然只能用于具有亲缘关系的进程间通信)。 len是映射到调用进程地址空间中的字节数,它从被映射文件开头起第off个字节处开始算。off通常设置为0.
内存映射区得保护由prot参数指定,它使用如下的常值。该参数的常见值是代表读写访问的PROT_READ | PROT_WRITE。 对指定映射区的prot参数指定,不能超过文件open模式访问权限。例如:若该文件是只读打开的,那么对映射存储区就不能指定PROT_WRITE。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |