• Linux文件-内存映射mmap


    mmap定义为:Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。

    在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间,创建和物理内存的映射关系。
    在这里插入图片描述
    mmap() 系统调用的原型
    函数原型:void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
    配套函数原型:int munmap(void *addr, size_t length);
    头文件:#include
    返回值:成功返回创建的映射区的首地址;失败返回宏 MAP_FAILED。

    参数介绍:
    addr: 建立映射区的首地址,由 Linux 内核指定。使用时,直接传递 NULL。
    length: 欲创建映射区的大小。
    prot: 映射区权限 PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE。
    flags: 标志位参数(常用于设定更新物理区域、设置共享、创建匿名映射区);
    MAP_SHARED: 会将映射区所做的操作反映到物理设备(磁盘)上。
    MAP_PRIVATE: 映射区所做的修改不会反映到物理设备。
    fd: 用来建立映射区的文件描述符。
    offset: 映射文件的偏移(4k 的整数倍)。
    munmap 函数:同 malloc 函数申请内存空间类似的,mmap 建立的映射区在使用结束后也应调用类似 free 的函数来释放。

    返回值:成功:0; 失败:-1

    https://blog.csdn.net/chumingqian/article/details/124855768

    使用示例:

    #include
    #include
    //文件映射到内存
    int shareFd = fopen("1.txt");//一个文件  
    unsigned char *srcAddr = NULL;
    uint32_t buffer_size = width * height * sizeof(int32_t);
    srcAddr = (unsigned char *)mmap(NULL, buffer_size, PROT_READ, MAP_SHARED, shareFd, 0);  //将文件映射到地址srcAddr 
    
    //读取1.txt的内容,保存到新的文件
    char dumpPath[100] = "";
    snprintf(dumpPath, sizeof(dumpPath), "/data/dump/buffer_%u_frame_%u_%u_%u.bin", sDumpCount++, width, height,sizeof(int32_t));
    int dumpFd = open(dumpPath, O_WRONLY|O_CREAT|O_TRUNC, 0644);
    if(dumpFd >= 0 && srcAddr != NULL) {
        write(dumpFd, srcAddr, buffer_size);
        // ALOGD("liuxurun dump writing buffer");
        close(dumpFd);
    }
    munmap((void*)srcAddr, buffer_size);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    SkiaSharp 之 WPF 自绘 拖曳小球(案例版)
    【hacker送书第2期】计算机考研精炼1000题
    鲁棒优化不确定性问题
    个推TechDay直播回顾 | 详解数据指标体系设计与开发全流程(附视频及课件下载)
    【后端框架】MyBatis(2)
    每日一练2——C++排序子序列问&&倒置字符串问题
    【TES720D-KIT】青翼科技支持双网口的全国产化四核CPU+FPGA处理器开发套件
    【VTK】实现对象切割
    Easily Compare and Deploy SQL Database Changes
    微信小程序入门讲解【超详细】
  • 原文地址:https://blog.csdn.net/qq_40500571/article/details/133772709