共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存) | 您所在的位置:网站首页 › c语言内存映射文件 › 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存) |
一、内存映射
概念:使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通内存一样对文件进行访问,不必再调用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 实验室设备网 版权所有 |