共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存) 您所在的位置:网站首页 c语言内存映射文件 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

#共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)| 来源: 网络整理| 查看: 265

一、内存映射

概念:使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通内存一样对文件进行访问,不必再调用read,write。

mmap()的优点:

实现了用户空间和内核空间的高效交互方式

二、函数定义

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);              

功能:创建共享内存映射

函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED( ((void *) -1) ),设置errno值

参数说明:

addr:指定要映射的内存地址,一般设置为 NULL 让操作系统自动选择合适的内存地址。

length:必须>0。映射地址空间的字节数,它从被映射文件开头 offset 个字节开始算起。

prot:指定共享内存的访问权限。可取如下几个值的可选:PROT_READ(可读), PROT_WRITE(可写), PROT_EXEC(可执行), PROT_NONE(不可访问)。

flags:由以下几个常值指定:MAP_SHARED(共享的) MAP_PRIVATE(私有的), MAP_FIXED(表示必须使用 start 参数作为开始地址,如果失败不进行修正),其中,MAP_SHARED , MAP_PRIVATE必选其一,而 MAP_FIXED 则不推荐使用。MAP_ANONYMOUS(匿名映射,用于血缘关系进程间通信)

fd:表示要映射的文件句柄。如果匿名映射写-1。

offset:表示映射文件的偏移量,一般设置为 0 表示从文件头部开始映射。

#include #include #include #include #include #include #include #include int main(){ void *addr; int fd; fd = open("test",O_RDWR); if(fd


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有