Linux > mmap

2023-05-16

目录

mmap

概念

使用

函数声明


mmap

概念

mmap 将 一个文件或者其它对象 映射到 进程的地址空间

实现 磁盘地址 和进程 虚拟的虚拟地址 的一一对应关系。

通过mmap 系统调用,我们可以 实现共享内存或者普通文件被映射到进程地址空间当中,进程可以向访问普通内存一样对文件进行操作。

使用

函数声明

 #include <sys/mman.h>

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

参数

addr 映射区的起始地址,如果是NULL系统自动分配
length 字节长度自动按照4kb对齐所以建议大小一般填成4kb的整数倍
port 映射区域的权限
flags 映射的标志位
fd  文件描述符
offset 文件偏移量自动按照4k对齐
port

PORT_EXEC:映射的区域具有可执行权限
PROT_READ:映射的区域具有可读权限
PROT_WRITE:映射区域具有可写权限
PROT_NONE:映射区域不可被访问

flags

MAP_SHARED:对映射区域的写入操作直接反映到文件当中
MAP_FIXED:若在start上无法创建映射则失败(如果没有此标记会自动创建)
MAP_PRIVATE:对映射区域的写入操作只反映到缓冲区当中不会写入到真正的文件
MAP_ANONYMOUS:匿名映射将虚拟地址映射到物理内存而不是文件(忽略fd)
MAP_DENYWRITE:拒绝其它文件的写入操作
MAP_LOCKED:锁定映射区域保证其不被置换
 

返回值

函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。

#include <iostream>
#include <sys/mman.h>
#include <cstring>
#include <cerrno>
#include <cstdio>
using namespace std;
static const int SIZE = 4096;
int main()
{
    char *str = (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
    //注意MAP_PRIVATE和MAP_SHARED
    //建立映射
    if (str == MAP_FAILED)
    {
        printf("%s\n", strerror(errno));
        return -2;
    }
    strcpy(str, "hello ksy");
    puts(str);
    //用于取消映射
    munmap(str, SIZE);
 
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux > mmap 的相关文章

随机推荐

  • 个人网页制作(教你制作简单网页)

    我相信很多人或多或少都曾想建立一个个人网站吧 xff0c 或分享生活瞬间 或分享学习心得 或者是分享技术文章 又或者是有其他想法 xff08 打造个人ip 商业变现或是其他 xff09 今天跟大家分享一下一般网站的搭建流程 xff0c 对建
  • 程序员学习能力提升三要素

    IT技术的发展日新月异 xff0c 新技术层出不穷 xff0c 具有良好的学习能力 xff0c 能及时获取新知识 随时补充和丰富自己 xff0c 已成为程序员职业发展的核心竞争力 多年的学习经验总结出了提高程序员学习能力的三个要点 学习人人
  • 基于linux下python的学习(文件操作、模块)

    一 文件操作 操作文件的函数 方法 在python中要操作文件需要记住的1个函数和3个方法 python中一切皆对象 open 打开文件 xff0c 并且返回文件操作对象 read 将文件内容读取到内存 write 将指定内容写入文件 cl
  • 制作Ubuntu 20.04.5 LTS (Focal Fossa)系统U盘的图文教程

    文章目录 前言 一 Ubuntu系统是什么 xff1f 二 下载ubuntu系统 1 打开对应的网站 三 开始制作系统U盘 1 格式化U盘 2 下载刻录软件UltraISO软件 3 用UltraISO软件加载ubuntu20 04 5的系统
  • android:onNewIntent

    本文编写目的 xff1a 供自己查阅 1 通过Intent启到一个Activity的时候 xff0c 就算已经存在一个相同的正在运行的Activity 系统也会创建一个新的Activity实例 为了不让Activity实例化多次 xff0c
  • fedora安装kde桌面

    yum install 64 KDE desktop
  • 怎么让图片在一个正方形div中不变形展示?且超出部分截取(隐藏),且截取图片的中间位置

    divContent width 200px height 200px border 1px solid red overflow hidden divContent img margin 0 padding 0 width 100 hei
  • [并行计算]Matlab并行计算工具箱(Parallel Computing Toolbox)官方文档教程中文版(1)

    Arranged By Zhonglihao 64 2018 请确认Matlab安装时点选了并行计算工具箱 第一章 xff1a parfor循环并行计算 parfor循环介绍 parfor循环是Matlab并行计算工具箱用于并行计算单循环的
  • xquartz Firefox Error: cannot open display: localhost:14.0

    应该是缺少localhost到127 0 0 1的映射 1 export DISPLAY 61 127 0 0 1 14 0 2 firefox OK
  • 百思不得姐之图片处理(保存与下载)

    一 功能图 二 讲解思路 1 回顾上一篇内容 2 创建加载图片类 同时创建xib 3 点击图片查看大图 4 点击查看大图 查看长图 5 model出展示图片的控制器 6 保存图片 7 封装根据网络状态展示不同的图片 三 回顾上一篇内容 1
  • CMake 学习

    目录 CMake学习网站 CMake安装 CMake编译程序 单个源文件的程序编译 在当前目录执行 cmake xff0c 执行结果 执行完成后的文件列表 使用GUN make来编译程序 得到可执行文件 hello 同目录下多源文件程序编译
  • dumpsys meminfo内存详解

    dumpsys meminfo使用方法帮助 adb shell dumpsys meminfo h meminfo dump options a d c s oom process a include all available infor
  • android恢复出厂设置,关机,重启以及系统升级和充电器连接广播

    恢复出厂设置 lt uses permission android name 61 34 android permission MASTER CLEAR 34 gt if Build VERSION SDK INT lt Build VER
  • Cmake系列(三) 在 CMakeLists.txt 引入第三方so库

    将 so 库和头文件拷贝到对应的目录 app src main jniLibs arm libxxx so 修改 CMakeLists txt 文件 第三方so库 这里和之前在第二步中介绍的创建一个新的原生库类似 xff0c 区别在于最后一
  • .net core MemoryCache(本机缓存)过期策略

    过期策略 1 1 永不过期 xff1a 永远不会过期 1 2 设置绝对过期时间点 xff1a 到期后就失效 1 3 设置过期滑动窗口 xff1a 只要在窗口期内访问 xff0c 它的过期时间就一直向后顺延一个窗口长度 1 4 滑动窗口 43
  • Windows asar工具安装使用与破解StarUml

    目录 安装nodejs 使用npm安装asar asar的压缩与解压 破解StarUml windows要破解StarUml xff0c 需要用到asar进行解压与打包 asar可以借助npm来安装 xff0c mac可以用homebrew
  • logcat中 读取垃圾回收消息

    目录 Dalvik 日志消息 ART 日志消息 有时 xff0c 发生垃圾回收事件时 xff0c 相应消息会输出到 Logcat 中 Dalvik 日志消息 在 Dalvik xff08 而不是 ART xff09 中 xff0c 每个 G
  • arm64-v8a、armeabi-v7a、armeabi、x86 abiFilters 详解

    abiFilters的作用 在app的gradle的defaultConfig里面加上如下 ndk abiFilters 34 armeabi v7a 34 指定要ndk需要兼容的架构 这样其他依赖包里mips x86 armeabi ar
  • Linux shell

    目录 shell 脚本 shell 概述 shell 分类 shell 语法 shell 脚本的定义与执行 自定义变量 环境变量 预设变量 脚本变量的特殊用法 条件测试语句 gt 文件 条件测试语句 gt 字符串 条件测试语句 gt 数字
  • Linux > mmap

    目录 mmap 概念 使用 函数声明 mmap 概念 mmap 将 一个文件或者其它对象 映射到 进程的地址空间 实现 磁盘地址 和进程 虚拟的虚拟地址 的一一对应关系 通过mmap 系统调用 xff0c 我们可以 实现共享内存或者普通文件