mmap函数

news2024/11/15 15:31:30

参考

https://blog.csdn.net/bhniunan/article/details/104105153

在这里插入图片描述

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

参数

  • addr:出参, 指定映射的起始地址,通常设为NULL,由内核来分配

  • len:入参, 代表将文件中映射到内存的部分的长度。

  • prot:入参,映射区域的保护方式。可以为以下几种方式的组合:
    PROT_EXEC 映射区域可被执行
    PROT_READ 映射区域可被读取
    PROT_WRITE 映射区域可被写入
    PROT_NONE 映射区域不能存取

  • flags:入参,映射区的特性标志位,常用的两个选项是:
    MAP_SHARD:写入映射区的数据会复制回文件,且运行其他映射文件的进程共享
    MAP_PRIVATE:对映射区的写入操作会产生一个映射区的复制,对此区域的修改不会写会原文件

  • fd:入参,要映射到内存中的文件描述符,有open函数打开文件时返回的值。

  • offset:入参,文件映射的偏移量,通常设置为0,代表从文件最前方开始对应,offset必须是分页大小的整数倍。

返回值
实际分配的内存的起始地址。

int munmap(void *start, size_t length)

与mmap函数成对使用的是munmap函数,它是用来解除映射的函数

参数

  • start:映射的起始地址
  • length:文件中映射到内存的部分的长度

返回值
解除成功返回0,失败返回-1。

	//打开文件
	fd = open("testdata",O_RDWR);
	//创建mmap
	start = (char *)mmap(NULL,128,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
	//读取文件	
	strcpy(buf,start);
	printf("%s\n",buf);
	//写入文件
	strcpy(start,"Write to file!\n");
 
	munmap(start,128);
	close(fd);

这段代码实现了将测试文件testdata打开,并用mmap函数将文件映射到虚拟内存中,通过指针start对文件进行读写。在终端中可看到由文件读取的数据。程序结束后,可以查看testdata文件,来查看写入的数据。

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

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

相关文章

网络编程3——TCP Socket实现的客户端服务器通信完整代码(详细注释帮你快速理解)

文章目录 前言一、理论准备Socket套接字是什么TCP协议的特点 二、TCP 流套接字提供的APIServerSocket APISocket API 三、代码实现请求响应式 客户端服务器服务器客户端疑惑解答为什么服务器进程需要手动指定端口号而客户端进程不需要为什么客户端中的服务器IP与端口号是"…

Mysql架构篇--Mysql 主从同步方案

文章目录 前言一、传统的主从复制:1 原理:2 缺点: 二、半同步复制(Semi-Synchronous Replication):三、组复制:1 原理:2 实现:2.1 myql 实例安装:2.1 myql 实…

量子近似优化算法(QAOA)入门(1):从量子绝热算法(QAA)角度的直观理解

文章目录 前言:量子计算的本质是测量一、基于量子逻辑电路的常用算法1.NISQ:Noisy Intermediate-Scale Quantum(含噪声中等规模量子) 二、量子绝热算法(QAA:Quantum Adiabatic Algorithm)1.QAA的…

【KingFusion】用KingFusion3.6创建一个客户端工程的步骤

哈喽,大家好,我是雷工! 今天学习用KingFusion3.6创建一个客户端工程,以下记录创建过程。 客户端组件作为KingFusion3.6的数据展示功能模块,其主要功能是通过组态组态式配置以及丰富的图表元素、动画连接等多样的展示形…

ROS:TF坐标变换

目录 一、TF坐标变换背景二、概念三、静态坐标变换3.1概念3.2实际用例3.2.1分析3.2.2流程3.2.3C实现 一、TF坐标变换背景 机器人系统上,有多个传感器,如激光雷达、摄像头等,有的传感器是可以感知机器人周边的物体方位(或者称之为:坐标&#…

《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》论文笔记

引言 全量参数微调在LLM背景下由“不方便”演变为“不可行|高昂成本”,基于“收敛的模型参数可以压缩到低维空间”的假设: the learned over-parametrized models in fact reside on a low intrinsic dimension. 作者提出LORA(Low Rank Adap…

远程关闭或重新启动计算机

远程关机只是从远程位置关闭计算机的过程。主要领域是组织在没有知识的情况下失去收入将是电力费用。员工倾向于在周末打开他们的系统。不必要的电力消耗也会影响我们的环境。在这种情况下,系统管理员可以在周末和非工作时间安排自动系统关闭,或者在必要…

Valve 签约开源 Linux 图形驱动开发者

导读据外媒 phoronix 报道,Valve 最近聘用了著名开源 Linux 图形驱动开发者 Alyssa Rosenzweig,以改进开源 Linux 图形驱动程序堆栈,增强 Linux 游戏生态系统。 Alyssa Rosenzweig 多年来在 Panfrost 开源、逆向工程 Arm Mali 图形驱动程序方…

【自动化测试基础知识】什么是自动化测试?

什么是自动化测试? 自动化测试是一种软件工具的应用,用于自动化由人驱动的检查和验证软件产品的手工过程。大多数现代敏捷和DevOps软件项目现在都包括从一开始就进行自动化测试。然而,为了充分理解自动化测试的价值,先学习下在它被广泛采用…

优化|一阶方法:求解不具有凸性和lipschitz连续性的复合问题

论文解读者:陈康明,赵田田,李朋 编者按:​ 对于大多数一阶算法,我们会在收敛性分析时假设函数是凸的,且梯度满足全局 Lipschitz 条件。而本文中,对于某一类特殊函数。我们不仅不要求函数是凸的…

基于信号博弈模型的区块链赋能下中小企业融资问题

​ 我国的金融体系是银行主导性,银行信贷是企业融资的首要来源。然而银企之间存在着严重的信息不对称,根据经典的微观银行理论,银行与企业之间的信息不对称会引发道德风险和逆向选择问题。因此在银行信贷市场中,当中小企业需要融资…

MySQL实现数据炸裂拆分(类似Hive的explode函数的拆分数组功能)

MySQL实现数据炸裂拆分(类似Hive的"explode"函数的拆分数组功能) 需求背景 背景描述 ​ 在Hive中,"explode"函数用于将数组类型的列拆分为多行,以便对数组中的每个元素进行处理。然而,在MySQL中,并没有直接…

前置微小信号放大器怎么用

前置微小信号放大器是一种用于将微弱信号从传感器转换成足够强度的信号以便更好地进行检测和处理的设备。它主要应用于各种传感器领域,例如温度传感器、压力传感器、光学传感器和生物传感器等。前置微小信号放大器的作用是提高信号的信噪比,减小噪声干扰…

天津热门大数据培训班 大数据选课技巧

大数据开发技术的应用时时刻刻都会影响我们的生活,所以很多想转行做大数据开发,大数据开发技术不断更新和发展,很多企业在开发过程中需要的大数据开发技术不断提高要求,因此市面上缺少的是要全面技能的大数据开发人员。 什么是大…

使用 Docker Desktop 安装 Centos 系统

一、前言 由于 Docker 是一个容器,它支持在一个服务器进行多服务部署,并且还能保持服务的独立性,那么,在Docker 上的运用时 我们也是可以 独立部署多个系统来做不同是其他,这样环境独立的情况下,也就不会造…

投票评选活动小程序v2-用户报名图片上传

投票评选活动小程序v2-用户自行报名收集材料页面 主要收集项目或者作品图片及其描述,可以在后台进行统一录入,也可以是在用户界面,让用户自行报名上传。 这里开发了一个“我要报名”页面,在首页点击“我要报名”按钮跳转过来。 …

精耕细作的运维资源成本管控方法-互联网企业的Finops思考与实践

当前,降本增效成为各大互联网公司的重要方向,IT成本则占据了互联网成本的大头。随着IT资源成本花费越来越高,很多公司意识到掌握管控成本和优化成本的重要性。 如何有效的降本?如何做好成本的洞察管控?如何掌握资源成…

5000字干货!让你一次搞懂什么是高保真原型

在产品设计领域,尤其是在用户体验设(UX)中,高保真原型至关重要。它是一种几乎按照产品最终的呈现模样制作出来的原型,包含产品的细节、真实的交互和完善的UI。正因为高保真原型最接近真实产品,因此成为企业…

使用Streamlit和OpenAI API构建视频摘要

本文提供了使用Streamlit和OpenAI创建的视频摘要应用程序的概述。该程序为视频的每个片段创建简洁的摘要,并总结视频的完整内容。 要运行应用程序,需要安装以下依赖项: Python(3.7或更高版本)StreamlitOpenAI API密钥llama_indexyoutube_transcript_api…

Vue3+Vite+Pinia+Naive项目搭建之二:scss 的安装和使用

前言 如果对 vue3 的语法不熟悉的,可以移步 Vue3.0 基础入门,快速入门。 1. 安装依赖 yarn add sass -D // or npm install sass -D 2. 页面样式初始化 reset.scss /* 新建 src/assets/style/reset.scss */ /* 页面样式初始化 */ html, body, div, s…