Linux文件-内存映射mmap

mmap定义为:Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。

在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间,创建和物理内存的映射关系。
在这里插入图片描述
mmap() 系统调用的原型
函数原型:void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
配套函数原型:int munmap(void *addr, size_t length);
头文件:#include <sys/mman.h>
返回值:成功返回创建的映射区的首地址;失败返回宏 MAP_FAILED。

参数介绍:
addr: 建立映射区的首地址,由 Linux 内核指定。使用时,直接传递 NULL。
length: 欲创建映射区的大小。
prot: 映射区权限 PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE。
flags: 标志位参数(常用于设定更新物理区域、设置共享、创建匿名映射区);
MAP_SHARED: 会将映射区所做的操作反映到物理设备(磁盘)上。
MAP_PRIVATE: 映射区所做的修改不会反映到物理设备。
fd: 用来建立映射区的文件描述符。
offset: 映射文件的偏移(4k 的整数倍)。
munmap 函数:同 malloc 函数申请内存空间类似的,mmap 建立的映射区在使用结束后也应调用类似 free 的函数来释放。

返回值:成功:0; 失败:-1

https://blog.csdn.net/chumingqian/article/details/124855768

使用示例:

#include<sys/mman.h>
#include<fcntl.h>
//文件映射到内存
int shareFd = fopen("1.txt");//一个文件  
unsigned char *srcAddr = NULL;
uint32_t buffer_size = width * height * sizeof(int32_t);
srcAddr = (unsigned char *)mmap(NULL, buffer_size, PROT_READ, MAP_SHARED, shareFd, 0);  //将文件映射到地址srcAddr 

//读取1.txt的内容,保存到新的文件
char dumpPath[100] = "";
snprintf(dumpPath, sizeof(dumpPath), "/data/dump/buffer_%u_frame_%u_%u_%u.bin", sDumpCount++, width, height,sizeof(int32_t));
int dumpFd = open(dumpPath, O_WRONLY|O_CREAT|O_TRUNC, 0644);
if(dumpFd >= 0 && srcAddr != NULL) {
    write(dumpFd, srcAddr, buffer_size);
    // ALOGD("liuxurun dump writing buffer");
    close(dumpFd);
}
munmap((void*)srcAddr, buffer_size);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值