Linux高级编程_32_磁盘映射

在这里插入图片描述

文章目录

  • 磁盘映射
    • 相关函数
      • 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.mzph.cn/news/881616.shtml

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

相关文章

H7-TOOL的LUA小程序教程第14期:任意波形信号发生器,0-20mA输出和微型数控电源(2024-10-11,已更新)

LUA脚本的好处是用户可以根据自己注册的一批API&#xff08;当前TOOL已经提供了几百个函数供大家使用&#xff09;&#xff0c;实现各种小程序&#xff0c;不再限制Flash里面已经下载的程序&#xff0c;就跟手机安装APP差不多&#xff0c;所以在H7-TOOL里面被广泛使用&#xff…

vue3学习:数字时钟遇到的两个问题

在前端开发学习中&#xff0c;用JavaScript脚本写个数字时钟是很常见的案例&#xff0c;也没什么难度。今天有时间&#xff0c;于是就用Vue的方式来实现这个功能。原本以为是件非常容易的事&#xff0c;没想到却卡在两个问题上&#xff0c;一个问题通过别人的博文已经找到答案&…

Java—继承性与多态性

目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…

03 django管理系统 - 部门管理 - 部门列表

部门管理 首先我们需要在models里定义Dept类 # 创建部门表 class Dept(models.Model):name models.CharField(max_length100)head models.CharField(max_length100)phone models.CharField(max_length15)email models.EmailField()address models.CharField(max_length2…

k8s : 在master节点部署服务

部署多个work节点过于麻烦&#xff0c;于是打算直接在master节点部署服务测试 解决办法&#xff1a; k8s集群init后&#xff0c;你的master节点会被固定分配污点taint信息&#xff0c;这个污点的作用是让没有设置容忍的pod不会被调度到这个节点&#xff0c;因此我们的服务一般…

【Python】selenium获取鼠标在网页上的位置,并定位到网页位置模拟点击的方法

在使用Selenium写自动化爬虫时&#xff0c;遇到验证码是常事了。我在写爬取测试的时候&#xff0c;遇到了点击型的验证码&#xff0c;例如下图这种&#xff1a; 这种看似很简单&#xff0c;但是它居然卡爬虫&#xff1f;用简单的点触验证码的方法来做也没法实现 平常的点触的方…

十一、数据库的设计规范

文章目录 1. 为什么需要数据库设计2. 范式2.1 范式介绍2.2 范式都包括哪些2.3 键和相关属性的概念2.4 第一范式(1st NF)2.5 第二范式(2nd NF)2.6 第三范式(3rd NF)2.7 小结3. 反范式化3.1 概述3.2 应用举例3.3 反范式的新问题3.4 反范式的使用场景3.4.1 增加冗余字段的建议3.…

[Linux#65][TCP] 详解 延迟应答 | 捎带应答 | 流量控制 | 拥塞控制

目录 一、延迟应答 二、捎带应答 三. 流量控制 总结 四. 拥塞控制 1. 拥塞控制 2. 慢启动机制&#xff1a; 3.思考 4.拥塞避免算法 5. 快速恢复算法 一、延迟应答 1. 立即应答问题 接收数据的主机若立刻返回ACK应答&#xff0c;可能返回的窗口较小。例如&#xff1…

安装测试hasura

遗憾的是hasura 访问MySQL是收费的&#xff0c;访问PostgreSQL和MS SQL Server是免费的。 安装PG数据库 # 运行Hasura容器 docker run -d --name postgres-hasura -e POSTGRES_PASSWORDPassw0rd -e POSTGRES_DBhasura -p 5433:5432 postgres docker exec -it postgres-hasu…

TDC上YARN Web-UI 查看application日志方法

方法一 #通过浏览器访问tdc&#xff0c;访问的工作节点对于TDC都是外部节点。在提交给yarn任务后&#xff0c;YarnRM的Web UI 可以展示yarnnm上运行的application日志&#xff0c;但是由于跳转的svc地址&#xff0c;无法直接访问。 #在tdc界面上找到yarn实例&#xff0c;进入ya…

数据治理:制造企业转型的关键要素与战略需求

制造业&#xff0c;作为国民经济的主体&#xff0c;是立国之本、兴国之器、强国之基。从工业文明的曙光初现&#xff0c;到今日全球化的激烈竞争&#xff0c;始终昭示着一个真理&#xff1a;没有强大的制造业&#xff0c;就没有国家和民族的强盛。 为全面推进制造强国建设&…

Python精选200Tips:186-190

针对序列&#xff08;时间、文本&#xff09;数据的网络结构 续 P186-- 双向LSTM(Bidirectional Long Short-Term Memory 2005)&#xff08;1&#xff09;模型结构说明&#xff08;2&#xff09;创新性说明&#xff08;3&#xff09;示例代码&#xff1a;IMDB电影评论情感分析 …

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标,10000余张图像,yolo格式目标检测,9GB数据量。

污水排放口细粒度检测数据集&#xff0c;污-水排放口的类型包括10类目标&#xff08;1 合流下水道&#xff0c;2 雨水&#xff0c;3 工业废水&#xff0c;4 农业排水&#xff0c;5 牲畜养殖&#xff0c;6 水产养殖&#xff0c;7 地表径流&#xff0c;8 废水处理厂&…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入&#xff0c;滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

ssm职业高中学情成绩系统设计+jsp

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容 2 第二章 开发环…

PE结构之绑定导入表

打印绑定导入表 //打印 绑定导入表 BOOL PrintBoundImport(__in char* m_fileName) {char* Filebuffer NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader NULL;PIMAGE_NT_HEADERS LPntHeader NULL;LPdosHeader (PIMAGE…

Qt基础对话框QDialog

模态显示对话框 调用exec方法可以使得对话框模态显示&#xff0c;但是一个阻塞函数 [virtual slot] int QDialog::exec() 对话框的三个槽函数 accept [virtual slot] void QDialog::accept(); reject [virtual slot] void QDialog::reject() done [virtual slot] void QDia…

鸢尾花书实践和知识记录[6-23数据聚类]

文章目录 思维导图数据聚类和引例基于图论的聚类算法算法流程1构造数据构造距离矩阵相似度相似度矩阵创建图 拉普拉斯矩阵标准拉普拉斯矩阵(Combinatorial Laplacian)归一化拉普拉斯矩阵 (Normalized Laplacian)无标度拉普拉斯矩阵 (Signless Laplacian)归一化对称拉普拉斯矩阵…

Vue深入了解

Vue深入了解 MVVMv-model (双向数据绑定原理)异步更新keep-alive原理$nextTick原理computed 和 watch 的区别css-scoped虚拟DOMVuex && PiniaVue-router原理proxy 与 Object.defineProperty组件通信方式 MVVM <!DOCTYPE html> <html lang"en">&…

怎么把一段音频的人声和背景音乐分开?

在数字音频处理中&#xff0c;将一段音频中的人声和背景音乐分开是一个复杂但又常见的需求。这种技术广泛应用于音乐制作、影视后期、广告制作等多个领域。本文将为你详细解析如何通过不同的方法实现这一目标&#xff0c;帮助你更好地掌握音频分离技术。 一、音频分离的基本概念…