Linux高级编程_32_磁盘映射

news2024/11/24 4:47:29

在这里插入图片描述

文章目录

  • 磁盘映射
    • 相关函数
      • mmap函数
        • 作用:
      • munmap函数
        • 作用:
      • truncate 函数
        • 作用:
      • 语法:
      • 使用步骤:

磁盘映射

概述:

> 存储映射 I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。
于是当从缓冲区中取数据,就相当于读文件中的相应字节。
于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。
这样,就可在不使用 read 和write 函数的情况下,使用地址(指针)完成 I/O 操作。
使用存储映射这种方法,首先应通知内核,将一个指定文件映射到存储区域中。这个映射工作可以通过mmap函数来实现。

优点:

相对于文件的读写,速度较快

相关函数

mmap函数

作用:

​ 建立映射

#include <sys/mman.h>

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

参数:
   1 addr:  
	生成的映射的地址,填NULL  因为你自己写的可能地址不够大 给NULL 让系统自动找合适的地址
   2 length:
		开启的内存大小
   3 port:权限
		PROT_READ  :可读
       	 PROT_WRITE :可写
    4 flags:标志位
        	MAP_SHARED 共享的 -- 对映射区的修改会影响源文件  【基本就用这个】
        	MAP_PRIVATE 私有的
    5 fd: 映射的文件的文件描述符
    6 offset: 偏移量,  【一般写0】
        
        返回值:
        	开启的映射的首地址

munmap函数

作用:

​ 释放映射

#include <sys/mman.h>
int munmap(void *addr, size_t length);

参数:
    1 addr: 要释放的映射的地址
    2 length: 释放的长度   不是内存没了 只是断开连接
        
    //    注意:  该函数只是断开了 该进程与映射区之间 的 链接

truncate 函数

注意:

如果文件大小 大于 扩展部分 则会删除 多出部分

要是 文件大小 小于 扩展部分 就扩展

也就是说 扩展的时候 给大扩 扩小了 要比你的文件大小 还小 就删你文件了

作用:

扩展内存

语法:

int truncate(const char *path, off_t length);
参数:
	path:文件地址
	length:长度

使用步骤:

  • 1 ,打开文件获取文件描述符
  • 2,扩展映射的缓存区大小
  • 3 , 建立映射
  • 4 , 读或写
  • 5 , 断开映射

写入:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#define BUFFSIZE 5 

// 磁盘映射 写入
int main(int argc, char const *argv[])
{
    // - 1 ,打开文件获取文件描述符
    int fd = open("./tt.txt", O_CREAT | O_RDWR, 0666);
    // - 2,扩展映射的缓存区大小
    truncate("tt.txt", BUFFSIZE);
    // - 3 , 建立映射
    char *buf =(char *)mmap(NULL, BUFFSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    // - 4 ,写入
    char *str = "hello";
    strcpy(buf, str);
    // - 5 , 断开映射
    munmap(buf, BUFFSIZE);
    return 0;
}
// 优势  不用 read write

读取:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#define BUFFSIZE 5
//    磁盘映射 读取
int main(int argc, char const *argv[])
{
    // - 1 ,打开文件获取文件描述符
    int fd = open("./tt.txt", O_CREAT | O_RDWR, 0666);
    // - 2,扩展映射的缓存区大小
    truncate("tt.txt", BUFFSIZE);
    // - 3 , 建立映射
    char *buf = (char *)mmap(NULL, BUFFSIZE, PROT_READ , MAP_SHARED, fd, 0);
    // - 4 , 读
    printf("buf = %s\n",buf); 
    // - 5 , 断开映射
    munmap(buf, BUFFSIZE);
    return 0;
}
					// 优势  不用 read write

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

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

相关文章

Excel中Ctrl+e的用法

重点&#xff1a;想要使用ctrle&#xff0c;前提是整合或拆分后的结果放置的单元格必须和被提取信息的单元格相邻&#xff0c;且被提取信息的单元格也必须相连。 下图为错误示例 这样则可以使用ctrle 1、信息整合 2、提取信息 3、添加符号 4、信息顺序调换 5、数字提取 crtle还…

AI测试之 TestGPT

如今最火热的技术莫非OpenAI的ChatGPT莫属&#xff0c;AI技术也在很多方面得到广泛应用。今天我们要介绍的TestGPT就是一个软件测试领域中当红的应用。 TestGPT是什么&#xff1f; TestGPT是一家总部位于以色列特拉维夫的初创公司 CodiumAI Ltd.&#xff0c;发布的一款用于测…

Android:记录一个打包发布版的release包以后闪退的问题

个人感觉其实release闪退的问题挺难排查的&#xff0c;因为release包运行起来as捕获不到相应的应用程序进程&#xff0c;从而不易查看到日志&#xff0c;也是我玩得不溜&#xff0c;大家有不同的方法可以评论区探讨&#xff0c;我也定期回复一些评论一起讨论。以下是我遇到的情…

高效的读书与笔记管理:打造个人知识体系

01 读书学习的常见问题 1、读书⼯具分散&#xff0c;划线和笔记分散&#xff0c;导致我们的复习、搜索效率低。⽐如不同书籍中&#xff0c;提到了同⼀个问题的观点&#xff0c;很难进行关联。 2、读书&#xff0c;仅限于读&#xff0c;知道别⼈的观点&#xff0c;但是缺乏内…

【AI论文精读13】RAG论文综述2(微软亚研院 2409)P5-可解释推理查询L3

AI知识点总结&#xff1a;【AI知识点】 AI论文精读、项目、思考&#xff1a;【AI修炼之路】 P1&#xff0c;P2&#xff0c;P3&#xff0c;P4 五、可解释推理查询&#xff08;L3&#xff09; ps&#xff1a;P2有四种查询&#xff08;L1&#xff0c;L2&#xff0c;L3&#xff0c;…

学习记录:js算法(六十二):单词搜索 II

文章目录 单词搜索 II思路一思路二 单词搜索 II 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”…

crashrpt3 开源项目的Vs 2022 C++20及其以上的编译

1. 首先从github 下载源代码 crashrpt3 2. 用CMake Gui 编译成vs studio 工程文件 2.1 点击 config 按钮 2.2 依次点击 Generate 按钮、Open Project 按钮.之后vs 2022 会打开编译好的sln工程文件 3.全选解决方案里面的所有项目,设置C语言标准,我这里设置是最新C,即启用的是…

Solidity基础语法

Solidity的在线编辑器&#xff1a;https://remix.ethereum.org/ 一、合约结构 1、SPDX许可标识&#xff1a;指定代码的开源许可 2、pragma指令&#xff1a;声明Solidity版本 3、导入语句&#xff1a;引入其他合约或库 4、合约声明&#xff1a;使用contract关键字 5、状态变量&…

【关系模型】关系完整性约束

按照上面的框架我们已经讲了关系数据结构还有关系操作&#xff0c;今天来补充这一章的关系完整性约束 关系完整性约束 完整性约束 完整性约束可以保证数据的一致性和元组的唯一性 实体完整性约束 比如在学生表中&#xff0c;每一个元组都应该是唯一并且元组之间是可以区分…

JavaScript(Web APIs 作用和分类,DOM数是什么,document是什么,根据css选择器来获取DOM元素,修改DOM元素的方式,边量声明)

变量声明 变量声明有三个 var let 和 const建议&#xff1a; const 优先&#xff0c;尽量使用const&#xff0c;原因是&#xff1a; const 语义化更好 很多变量我们声明的时候就知道他不会被更改了&#xff0c;那为什么不用 const呢&#xff1f; 实际开发中也是&#xff0c;…

【unity框架开发8】unity场景Scene的使用, 如何封装一个场景管理器

文章目录 一、场景基本操作1、加载切换场景2、获取场景信息3、激活场景4、场景基本属性获取5、已加载场景个数6、获取场景中所有物体7、创建新场景8、卸载销毁场景 二、使用协程方法来异步加载场景1、AsyncOperation相关的代码应写在一个协同程序中。2、allowSceneActivation加…

AI深湖DeepLate人工智能的数据集格式开源项目

人工智能的数据集格式 文档 • 入门 • API 参考 • 例子 • 博客 • Slack 社区 • Twitter&#xff08;推特&#xff09; 用其他语言阅读这篇文章: English 深湖 Deep Lake Deep Lake 是一种数据集格式&#xff0c;提供简单的 API 以用于创建、存储和协作处理任何规模的…

Spring Security 与 OAuth 2.0 登录实现指南

文章目录 一、项目概述二、环境准备三、创建GitHub OAuth应用四、项目依赖配置五、配置OAuth 2.0六、创建控制器七、创建视图八、运行应用九、用户界面展示十、总结 在现代的Web应用中&#xff0c;安全性是一个不可忽视的因素。OAuth 2.0作为一种流行的授权框架&#xff0c;提供…

浅析主流监控告警系统基本架构和原理

浅析主流监控告警系统基本架构和原理 一&#xff0c;监控系统的作用和目前主流监控系统 1&#xff0c;作用&#xff1a;监控系统一般有以下这几个作用 实时采集监控数据&#xff1a;包括硬件、操作系统、中间件、应用程序等各个维度的数据。实时反馈监控状态&#xff1a;通过…

论文笔记:RelationPrompt :Zero-Shot Relation Triplet Extraction

论文来源: ACL Findings 2022 论文链接:https://arxiv.org/pdf/2203.09101.pdf 论文代码:http://github.com/declare-lab/RelationPrompt 本篇论文是由阿里达摩院自然语言智能实验室于2022年发表的关于零样本关系抽取的顶会论文,本篇博客将记录我在阅读过程中的一些笔记…

AI自动生成PPT解决方案,AI生成PPT-PrensentationGen-Java实现

AI自动生成PPT解决方案&#xff0c;AI生成PPT-PrensentationGen-Java实现。 利用大语言模型生成PPT文件的SpringBoot Web应用&#xff0c;主要功能是自动化创建演示文稿&#xff0c;适用于快速制作演示材料&#xff0c;特色在于其高效的模板处理和文本替换技术。 点击视频观看…

Python入门:如何在Python中优雅地书写多行字符串!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 多行字符串📒📝 什么是多行字符串?📝 三重引号📝 字符串连接📝 反斜杠⚓️ 相关链接 ⚓️📖 介绍 📖 在编程过程中,时常会遇到需要使用多行字符串的场景。例如,在编写长参数、描述文本或代码文档时,多行字符串…

java生成日历数据列表并按日历格式导出到excel

日历格式输出 日历数据列表导出封装日历格式实体类效果 日历数据列表 /**** 封装日历数据* param year 年份* param month 月份*/public List<InspectionDailyStaffPlanCalendarData> selectCalendarDataList(int year,int month,List<InspectionDailyStaffPlan> …

centos7 Oracle 11g rac 静默安装(NFS配置共享存储)

1.环境信息准备 注意&#xff1a; 在配置网络时&#xff0c;Oracle RAC的每个节点必须具有至少两个以上的网卡&#xff0c;一张网卡对外提供网络服务&#xff0c;另一张网卡用于各个节点间的通信和心跳检测等。在配置RAC集群的网卡时&#xff0c;如果节点1的公共接口是eth0&…

随机变量及其分布

定义 1.随机变量是一个从样本空间&#xff08;所有可能结果的集合&#xff09;到实数集的函数。样本空间中的每个结果都对应于随机变量的一个值。随机变量的值可以是离散的&#xff0c;也可以是连续的。随机变量通常用大写字母表示&#xff0c;如 X、Y 或 Z。 2.随机变量和事…