当前位置: 首页 > news >正文

mmap映射文件

 

目录

 一、前言

二、解决方法

三、mmap模拟

3.1代码

3.2过程

3.3mmap返回值


 一、前言

        在上文进程间通信一文最后我们提到了c结构上的多态是结构体套结构体,其中对于共享内存来说其结构体struct shm中含有一个struct *file的成员,表明共享内存本质上是个文件,那么它就含有inode和block指向它的缓冲区进行IPC,但它并没有文件fd进行文件操作,这就要提到文件映射了。

二、解决方法

        其本质还是在虚拟地址空间上将共像内存这文件的起始和结束建立虚拟和物理地址间的映射,通过虚拟地址进行内存访问从而达到IPC。

三、mmap模拟

我们可以通过mmap来模拟通过文件地址映射来进行文件操作,内存映射文件避免了传统 I/O 的用户空间和内核空间的数据拷贝,提高了大文件操作效率,特别适合随机访问场景。

3.1代码

#include <iostream>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>int main() {const char* filename = "test.txt";const char* message = "Hello, mmap!";const size_t size = 13;// 创建并写入测试文件int fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0644);if (fd == -1) {perror("open");return 1;}lseek(fd, size - 1, SEEK_SET);write(fd, "", 1);// 内存映射文件char* map = static_cast<char*>(mmap(nullptr,        // 让系统选择映射地址size,           // 映射大小PROT_READ | PROT_WRITE,  // 可读可写MAP_SHARED,     // 更改会写回文件fd,             // 文件描述符0               // 从文件起始位置开始映射));if (map == MAP_FAILED) {perror("mmap");close(fd);return 1;}// 写入数据到映射区域memcpy(map, message, size);// 同步到磁盘if (msync(map, size, MS_SYNC) == -1) {perror("msync");}// 解除映射if (munmap(map, size) == -1) {perror("munmap");}close(fd);std::cout << "文件映射完成,内容已写入 " << filename << std::endl;return 0;
}    

3.2过程

3.3mmap返回值

http://www.lryc.cn/news/587425.html

相关文章:

  • mapstruct与lombok冲突原因及解决方案
  • Java面试基础:面向对象(2)
  • 利用 MySQL 进行数据清洗
  • System.getenv()拿不到你配置的环境变量
  • 流程控制:从基础结构到跨语言实践与优化
  • IP 地址与网络基础全面解析
  • AI驱动的软件工程(中):文档驱动的编码与执行
  • 【前端知识】移动端APP原生应用与H5交互底层逻辑
  • C#接口进阶:继承与多态实战解析
  • 高压空气冲击炮cad【3张】三维图+设计说明书
  • AutoDL挂载阿里云OSS
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • 自动润滑系统:从 “盲目养护“ 到智能精注的工业运维革命
  • MD5算法深度剖析与可视化解析
  • MailSpring
  • C++--unordered_set和unordered_map的使用
  • 基于 STM32H743VIT6 的边缘 AI 实践:猫咪叫声分类 CNN 网络部署实战(已验证)中一些bug总结
  • Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713
  • python3的可变参数如何传递元组和字典
  • 第七章 算法题
  • 016_Token计数与成本管理
  • python:使用openpyxl库,实现excel表格的创建、查询(读取)、修改、插入数据
  • 在新版本的微信开发者工具中使用npm包
  • 开源工具DeepFilterNet:实时语音降噪
  • AI驱动的软件工程(上):人机协同的设计与建模
  • Vue 3 TypeScript 接口(Interface)使用
  • (一)SAP Group Reporting (GR) 集团财务合并解决方案套件概述
  • 数智管理学(三十三)
  • [论文阅读] 软件工程 | 首个德语软件工程情感分析黄金标准数据集:构建与价值解析
  • 【读书笔记】《Effective Modern C++》第二章:auto