Linux文件-内存映射mmap

news2024/11/15 17:18:28

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何成为CISP信息安全专业人员

随着信息技术和经济社会的交汇融合&#xff0c;网络安全一跃成为国家最为关注的焦点之一。 对于网络安全行业的资质证书来说&#xff0c;CISP成为了目前从业人员最为关注和了解的证书之一&#xff0c;那么&#xff0c;在网络安全行业&#xff0c;CISP证书的价值究竟在哪里&…

MBBF展示的奇迹绿洲:5G的过去、此刻与未来

如果你来迪拜&#xff0c;一定不会错过全世界面积最大的人工岛项目&#xff0c;这是被称为世界第八大奇迹的棕榈岛。多年以来&#xff0c;这座岛从一片砂石、一棵棕榈树开始&#xff0c;逐步建成了整个波斯湾地区的地标&#xff0c;吸引着全世界游人的脚步。 纵观整个移动通信发…

国际前十伦敦金交易app软件最新排行榜(信息汇总)

随着科技的发展&#xff0c;移动交易已成为的趋势。伦敦金交易也不再局限于桌面&#xff0c;而是越来越多地转移到手机上。 为了更好地展现软件的信息&#xff0c;本文将为大家介绍国际前十的伦敦金交易app软件最新排行榜。 1.金荣中国 金荣中国是知名的伦敦金交易平台&…

Maven导入程序包jakarta.servlet,但显示不存在

使用前提&#xff1a;&#xff08;Tomcat10版本&#xff09;已知tomcat10版本之后&#xff0c;使用jakart.servlet。而tomcat9以及之前使用javax.servlet。 问题描述&#xff1a;在maven仓库有导入了Jakarta程序包&#xff0c;但是界面仍然显示是javax。&#xff08;下图&…

基于VCO的OTA稳定性分析的零交叉时差模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux编译FFmpeg

Linux编译FFmpeg 1. 下载FFmpeg源码 FFmpeg源码下载地址&#xff1a;http://ffmpeg.org/download.html 在下面选择版本 2. 解压并创建生成目录 tar xvf ffmpeg-snapshot.tar.bz2 // 解压下载的FFmpeg源码 makedir /root/ffmpeg // 创建生成目录3. 编译FFmpeg 进入FF…

详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心的解决方案

1.概述 1.1 Zookeeper是什么&#xff1f; Zookeeper: 直译过来是动物园管理员的意思&#xff0c;这里的动物表示的就是当下主流的众多框架组件(ps&#xff1a;现在的框架组件都喜欢用动物当图标)&#xff0c;而Zookeeper的图标如下图所示&#xff0c;是一个人拿着一个铲子(铲…

Python学习笔记-使用哈希算法Hash,Hashlib进行数据加密

文章目录 一、概述1.1 哈希算法1.2 常见算法分类1.2.1 SHA算法1.2.2 MD4算法1.2.3 MD5算法 1.3 Hash算法的特性1.4 Hash算法的应用场景1.4.1 数据校验1.4.2 安全加密1.4.3 数字签名 二、Hash算法使用2.1 使用hash函数直接获取hash值2.2 使用hashlib库进行hash计算2.2.1 基本使用…

解决Win10电脑无线网卡的移动热点无法开启问题

一、目的 利用无线网卡连接网络&#xff0c;然后又用无线网卡通过移动热点分享该网络。 移动热点&#xff0c;简单地说&#xff0c;就是将台式机或笔记本的 Internet 连接转化成 WIFI 信号以供移动设备无线上网的功能&#xff0c;硬件前提是电脑须安装有无线网卡。 二、问题 …

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法

深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法 1、最近邻插值法 1、最近邻插值法 *最邻近插值&#xff1a;将每个目标像素找到距离它最近的原图像素点&#xff0c;然后将该像素的值直接赋值给目标像素 优点&#xff1a;实现简单&#xff0c;计算速度快缺点&…

运维少背锅? 7 种常见监控工具,你是否用过?

运维监控工具千千万&#xff0c;仅开源的解决方案就有流量监控&#xff08;MRTG、Cacti、SmokePing、Graphite等&#xff09;和性能告警&#xff08;Nagios、Zabbix、Zenoss Core、Ganglia、OpenTSDB等&#xff09;可供选择。 并且每种软件都有自己的特点和功能&#xff0c;各…

OpenCV4(C++)——模板匹配

matchTemplate 模板匹配和卷积运算大致相同&#xff0c;模板图类似于卷积核&#xff0c;从原图的左上角开始进行滑动窗口的操作&#xff0c;最后得到一个特征图&#xff0c;这个特征图里的数值就是每次计算得到的相似度&#xff0c;通用匹配方式&#xff0c;相似值是&#xff…

【博客搭建】1、拾壹博客本地启动遇到的问题和需要注意的坑

一、后端&#xff08;blog&#xff09;启动 1、修改application.yml中的数据库链接与密码&#xff0c;Redis账号密码&#xff0c;即可启动成功&#xff1b; 2、运行之前先导入sql&#xff1b; 3、 如需上传文件保存至本地&#xff08;例如相册的照片&#xff09;&#xff0c;需…

Verilog功能模块——异步FIFO

前言 FIFO的功能 FIFO在FPGA中应用很多&#xff0c;它主要有以下功能&#xff1a; 数据缓存&#xff0c;很多时候数据发送速度和数据接收速度并不实时匹配&#xff0c;而在其中插入一个FIFO&#xff0c;来临时存储数据&#xff0c;就能平衡发送和接收速度组合与分解数据&…

什么是系统架构师?什么是系统架构?

1. 什么是系统架构师&#xff1f; 系统架构设计师(System Architecture Designer&#xff09;是项目开发活动中的关键角色之一。系统架构是系统的一种整体的高层次的结构表示&#xff0c;是系统的骨架和根基&#xff0c;其决定了系统的健壮性和生命周期的长短。 系统架构设计…

允许访问:掌握权限的艺术

回到20世纪&#xff0c;网络攻击更难实施&#xff0c;因为大多数计算机没有联网&#xff0c;互联网并不普及&#xff0c;只有少数人群可以访问计算机&#xff0c;更重要的是&#xff0c;没有足够的动机来进行攻击。 访问控制政策 而今天&#xff0c;情况完全不同。在糟糕的数据…

【特纳斯电子】血氧饱和度监测仪设计-实物设计

视频及资料链接&#xff1a;血氧饱和度监测仪设计-实物设计 - 电子校园网 编号&#xff1a; T5662203M-SW 设计简介&#xff1a; 本设计是基于STM32的血氧饱和度监测仪系统&#xff0c;主要实现以下功能&#xff1a; 1. STM32单片机作为微处理器 2. MAX30102进行心率血氧检…

A股风格因子看板 (2023.10 第03期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第03期&#xff0c;指数组合数据截止日2023-09-30&#xff0c;要点如下 近1年A股风格因子检验统…

【环境】ubuntu下anaconda虚拟环境中安装的pytorch终于配置成功了!

前请提要 配置情况&#xff1a;双系统——win10ubuntu20.04&#xff1b;anaconda安装与虚拟环境创建&#xff1a;在安装conda的过程中&#xff0c;我修改了安装路径&#xff08;很清楚的记得&#xff09;&#xff1b;昨晚的状态&#xff1a;通过pytorch中的conda命令&#xff…

Linux磁盘常见知识

目录 一、基础概念 1.1 文件系统类型 1.2 主分区、扩展分区、逻辑分区三者关系 1.3 UUID 1.4 lvm逻辑卷管理系统 二. 常用命令 2.1 查看命令 2.2 分区命令 2.3 格式化命令 1.4 挂载命令 三、扩容根目录 一、基础概念 1.1 文件系统类型 文件系统类型决定了向分区中存放、读取数…