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

Webserver(2.7)内存映射

目录

  • 内存映射
  • 内存映射相关系统调用
  • 内存映射的注意事项
    • 如果对mmap的返回值(ptr)做++操作,释放内存(munmap)是否能够成功?
    • 如果open时O_RDONLY,mmap时prot参数指定PROT_READ | PROT_WRITE会怎样?
    • 如果文件偏移量为1000会怎样?
    • mmap什么情况下会调用失败?
    • open的时候O_CREAT一个新文件来创建映射区吗?
    • mmap后关闭文件描述符,对mmap映射有没有影响?
    • 对ptr越界操作会怎样?
  • 内存映射完成文件复制
  • 匿名映射

内存映射

将磁盘文件的数据映射到内存中,用户通过修改内存就能修改磁盘文件

内存映射相关系统调用

内存映射
void *mmap
释放内存
int munmap

#include<stdio.h>
#include<sys/mman.h>
#include<fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <wait.h>int main(){//1.打开一个文件int fd=open("test.txt",O_RDWR);int size=lseek(fd,0,SEEK_END);//获取文件大小//2.创建内存映射区void *ptr=mmap(NULL,size,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);if(ptr==MAP_FAILED){perror("mmap");exit(0);}//3.创建子进程pid_t pid=fork();if(pid>0){wait(NULL);//父进程char buf[64];strcpy(buf,(char *)ptr);printf("read data: %s\n",buf);}else if(pid==0){//子进程strcpy((char *)ptr,"nihao a,son!!!");}//关闭内存映射区munmap(ptr,size);return 0;
}

文件中的内容也被修改了
在这里插入图片描述

在这里插入图片描述

内存映射的注意事项

如果对mmap的返回值(ptr)做++操作,释放内存(munmap)是否能够成功?

不能,可以做++操作,但是不能正确释放,不是从首地址开始释放了,需要先保存地址

如果open时O_RDONLY,mmap时prot参数指定PROT_READ | PROT_WRITE会怎样?

会返回一个宏,map_failed,相当于-1
open函数中的权限建议和prot参数的权限保持一致

如果文件偏移量为1000会怎样?

偏移量必须是4k的整数倍,会返回map_failed

mmap什么情况下会调用失败?

length=0
权限不一致

open的时候O_CREAT一个新文件来创建映射区吗?

可以的,但是创建的文件的大小如果为0的话,肯定不行
可以对新的文件进行拓展,lseek来拓展,或者truncate

mmap后关闭文件描述符,对mmap映射有没有影响?

映射区还存在,创建映射区的fd被关闭,没有任何影响

对ptr越界操作会怎样?

越界操作操作的是非法的内存,会产生段错误

内存映射完成文件复制

//使用内存映射实现文件拷贝的功能
#include<stdio.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>int main(){//1.对原始的文件进行内存映射int fd=open("english.txt",O_RDWR);if(fd==-1){perror("open");exit(0);}//获取原始文件的大小int len=lseek(fd,0,SEEK_END);//2.创建一个新文件(拓展该文件)int fd1=open("cpy.txt",O_RDWR | O_CREAT,0664);if(fd==-1){perror("open");exit(0);}//对新创建的文件进行拓展truncate("cpy.txt",len);write(fd1,"",1);//3.分别做内存映射void * ptr =mmap(NULL,len,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);void * ptr1=mmap(NULL,len,PROT_READ | PROT_WRITE,MAP_SHARED,fd1,0);if(ptr==MAP_FAILED){perror("mmap");exit(0);}if(ptr1==MAP_FAILED){perror("mmap");exit(0);}//内存拷贝memcpy(ptr1,ptr,len);//释放资源,先打开先释放munmap(ptr1,len);munmap(ptr,len);close(fd1);close(fd);return 0;
}

在这里插入图片描述

匿名映射

不需要文件实体进行内存映射
之前的都是文件映射,通过文件,共享文件

#include<stdio.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<wait.h>int main(){//1.创建匿名内存映射区int len=4096;void * ptr=mmap(NULL,len,PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS,-1,0);if(ptr==MAP_FAILED){perror("mmap");exit(0);}//父子进程通信pid_t pid=fork();if(pid>0){//父进程strcpy((char *)ptr,"hello,world");wait(NULL);}else if(pid==0){//子进程sleep(1);printf("%s\n",(char *)ptr);}//释放内存映射区int ret=munmap(ptr,len);if(ret==-1){perror("munmap");exit(0);}return 0;
}

实现父子进程通信
在这里插入图片描述

相关文章:

Webserver(2.7)内存映射

目录 内存映射内存映射相关系统调用内存映射的注意事项如果对mmap的返回值(ptr)做操作&#xff0c;释放内存&#xff08;munmap&#xff09;是否能够成功&#xff1f;如果open时O_RDONLY&#xff0c;mmap时prot参数指定PROT_READ | PROT_WRITE会怎样&#xff1f;如果文件偏移量…...

vue3父子组件传值,子组件暴漏方法

1.父传子 defineProps 父组件直接通过属性绑定的方式给子组件绑定数据&#xff0c;子组件通过defineProps接收函数接收 其中v-model是完成事件绑定和事件监听的语法糖。v-model算是v-bind和v-on的简洁写法&#xff0c;等价于 <c-input ref"inputRef" :modelValue…...

Linux_04 Linux常用命令——tar

一、命令格式 tar [选项] [归档文件] [要处理的文件或目录]1、选项 c创建归档文件x解压缩归档文件z使用gzipj使用bzip2v处理过程显示信息f指定归档文件名称 2、归档文件-可指定目录及文件名 /home/wang.tar.gz 3、要处理的文件或目录 /home/study1/wang 二、常见命令 t…...

Java项目实战II基于Java+Spring Boot+MySQL的编程训练系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今数字…...

Rust:文档注释 //! 和 ///

在 Rust 编程语言中&#xff0c;//! 是一种特殊的文档注释&#xff08;documentation comment&#xff09;。它用于为整个模块、结构体、枚举、函数或其他项提供文档说明。与单行注释 // 和多行注释 /* ... */ 不同&#xff0c;//! 和 ///&#xff08;用于紧跟在项之前的文档注…...

练习LabVIEW第二十七题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第二十七题&#xff1a; 创建一个VI程序模拟温度测量。假设传感器输出电压与温度成正比。例如&#xff0c;当温度为70F时&…...

使用React构建现代Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用React构建现代Web应用 1 引言 2 React简介 3 安装React 4 创建React项目 5 设计应用结构 6 创建组件 7 使用组件…...

【系统设计】Merkle 算法在 Git 中的应用:深入理解与实践

引言 在现代软件开发中&#xff0c;Git 已成为版本控制的事实标准。Git 能够快速处理项目的变化&#xff0c;确保代码的完整性&#xff0c;其中一个关键技术就是 Merkle 树。本文将深入探讨 Merkle 算法的原理&#xff0c;以及其在 Git 中的具体应用。 1. Merkle 算法的原理 …...

【umi max】关于umi构建的项目在本地服务运行正常,但是部署时无致命报错却白屏,html文档的#root容器没有子元素的原因及解决办法

我们在部署时运维很可能会因为项目太多&#xff0c;进而放到不同的目录底下&#xff0c;例如project/H5-TEST-DEMO &#xff08;其中project是项目的存放目录&#xff0c;而H5-TEST-DEMO才是我们部署的项目根目录&#xff09;于是乎就会出现我们在本地服务里调试得好好的&#…...

Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)

本示例演示在vue+openlayers中实现轨迹动画,这里设置了小汽车开始,暂停,结束等的控制键,采用了线段步长位置获取坐标来定位点的方式来显示小车的动态。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群体提供基础知识及示例演示,能解决基…...

蓝牙MCU蓝牙医疗检测相关案例

英尚蓝牙MCU配套成熟的网络协议栈和丰富的示例代码及多平台APP工具。无需二次开发&#xff0c;即连即用&#xff1b;提供特色蓝牙/串口/USB三通芯片&#xff0c;为更多复杂无线应用赋能。相关产品及技术欢迎咨询。 应用案例说明: • 应用包括血糖仪,血氧仪,血压计,体温计,毒品…...

pytorch环境安装和更新,额外装cuda有什么意义

更新了一下设备和环境&#xff0c;看了眼其他教程&#xff0c;突然间发现都还让装cuda和cudnn。。。明明很早之前pytorch使用的和系统的cuda就已经脱钩了。 测试了一下不额外装也没发现什么问题&#xff0c;如果有谁知道装系统的cuda对pytorch有何意义&#xff0c;可以评论区告…...

【观成科技】APT组织常用开源和商业工具加密流量特征分析

概述 在当前的网络安全环境中&#xff0c;APT组织的活动愈发频繁&#xff0c;利用其高级技术和社会工程手段&#xff0c;针对全球范围内的政府、军事和企业目标发起了一系列复杂的网络攻击。在不断升级的攻击中&#xff0c;开源和商业工具凭借其灵活性、易用性和全球化攻击能力…...

Java开发者的Python快速进修指南:面向对象进阶

在上一期中,我们对Python中的对象声明进行了初步介绍。这一期,我们将深入探讨对象继承、组合以及多态这三个核心概念。不过,这里不打算赘述太多理论,因为我们都知道,Python与Java在这些方面的主要区别主要体现在语法上。例如,Python支持多重继承,这意味着一个类可以同时…...

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

诱骗取电快充协议芯片,支持与其它 MCU 共用 D+D-网络和电脑传输数据

前言 在科技日新月异的今天&#xff0c;快充技术已成为智能手机、平板电脑乃至笔记本电脑等电子设备不可或缺的一部分。各大厂商为了提升用户体验&#xff0c;纷纷推出了自家的快充协议&#xff0c;这些协议不仅让充电速度大幅提升&#xff0c;还带来了更加智能、安全的充电体验…...

Java Executor ScheduledExecutorService 源码

前言 相关系列 《Java & Executor & 目录》《Java & Executor & ScheduledExecutorService & 源码》《Java & Executor & ScheduledExecutorService & 总结》《Java & Executor & ScheduledExecutorService & 问题》 涉及内容 …...

【力扣 + 牛客 | SQL题 | 每日6题】牛客SQL热题 + 力扣hard

1. 牛客SQL热题206&#xff1a;获取每个部门中当前员工薪水最高的相关信息 1.1 题目&#xff1a; 描述 有一个员工表dept_emp简况如下: emp_nodept_nofrom_dateto_date10001d0011986-06-269999-01-0110002d0011996-08-039999-01-0110003d0021996-08-039999-01-01 有一个薪水…...

前端常见错误

搭建vueelement-ui脚手架错误 基于vue官方文档和element官方文档搭建手册报错 安装element Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist. types.js?8ad0:39 Uncaught TypeError: Cannot read property prototype of undefi…...

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发&#xff1a;图片切割插件 在图片处理领域&#xff0c;按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件&#xff0c;用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时&#xff0c;本文介绍如何使用 cursor 辅助工具来更高效…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...