内存映射简单使用

本文介绍了C语言在Linux环境下如何进行内存映射,包括常用方法、实例演示和注意事项。通过设置不同的参数,如PROT_READ、PROT_WRITE、MAP_SHARED和MAP_PRIVATE,实现对文件的读写,并通过映射内存来共享或私有化数据。同时强调了在内存映射过程中需要注意文件大小与映射存储区大小的关系,避免数据丢失或触发SIGBUS信号导致进程终止。
摘要由CSDN通过智能技术生成

内存映射

1.常用方法
   #include <sys/mman.h>

   void *mmap(void *addr, size_t length, int prot, int flags,
              int fd, off_t offset);
   int munmap(void *addr, size_t length);
成功,返回存储器起始地址;失败,返回MAP_FAILED

addr:指定映射存储区的起始地址,通常设置为0,表示由系统选择起始地址。

length:存储地址大小。

prot:映射存储区的保护要求。PROT_READ,存储器可读;PROT_WRITE,存储区可写;PROT_EXEC,存储区可执行;PROT_NONE,存储区不可访问。保护要求不能超过文件open模式访问权限。

flags:MAP_SHARED,表示对映射区的修改,相当于对文件的修改;MAP_PRIVATE,表示对映射区的修改,只是对文件副本的修改,原文件不变。一般设置flags为MAP_SHARED。

fd:映射存储区对应的文件。

offset:偏移量。

2.实例

1.创建两个进程,使用映射内存读写文件中的数据。

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <wait.h>
#include 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值