美文网首页
Linux--mmap存储映射

Linux--mmap存储映射

作者: 锈色的栅栏 | 来源:发表于2024-11-12 11:26 被阅读0次

1、mmap概述

存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件

2、mmap的API

1、建立文件和内存的映射

#include<sys/mman.h>
void*mmap(void *addr ,size_t length,int prot,int flags, int fd, off_t offset);

功能:
        建立文件和内存的映射
参数:
    addr 地址,填NULL
    length 长度 要申请的映射区的长度
    prot 权限
        PROT_READ 可读
        PROT_WRITE 可写
    flags 标志位
        MAP_SHARED 共享的 -- 对映射区的修改会影响源文件
        MAP_PRIVATE 私有的
    fd 文件描述符 需要打开一个文件
    offset 指定一个偏移位置 ,从该位置开始映射 (1024的整数倍)
返回值
    成功 返回映射区的首地址
    失败 返回 MAP_FAILED ((void *) -1)

2、拓展文件大小

#include<unistd.h>
#include<sys/types.h>
int truncate(const char*path,off_t length);

功能:
        拓展文件大小
参数:
        path 要拓展的文件
        length 要拓展的长度
返回值:
        成功 0
        失败 -1

3、释放映射区域(只能解除本进程的映射)

int munmap(void * addr ,size_t length);

功能:
    释放映射区域
参数:
    addr 映射区的首地址
    length 映射区的长度
返回值
    成功 返回0
    失败 返回 -1

示例代码

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<unistd.h>
#include<string.h>
int main(int argc,char const*argv[])
{
        //通过open事先打开文件
        int fd = open("tmp", O_RDWR | O_CREAT, 0666);
        if (fd < 0)
        {
            perror("open");
            return 0;
        }
        //拓展文件大小
        truncate("tmp", 16);
        //建立映射
        char *buf = (char *)mmap(NULL, 16, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
        //使用区域
        strcpy(buf, "hello mmap");
        //断开映射
         munmap(buf, 16);
         return 0;
}


相关文章

  • php设计模式(五)数据对象映射模式

    数据对象映射模式 orm 对象和数据存储映射,对对象的操作映射为对数据的存储操作

  • go学习笔记(映射)

    映射 映射是一种用来存储一系列无序键值对的数据结构 映射的底层存储结构。 可以看出一个映射里包含了很多个hash桶...

  • MMAP-存储映射I/O

    存储映射I/O 介绍 存储映射IO(Memory-mapped I/O) 使用一个磁盘文件与存储空间的一个缓冲区相...

  • 设计模式之:数据对象关系模式

    是将类的对象属性和数据存储映射起来,一个对象的操作会映射为对数据存储的操作,如new一个对象,对应的数据就会映射到...

  • Linux下查看HBA卡的驱动版本和WWPN

    平时在Linux下映射存储,都是映射哪台就给哪台插线,然后在存储端扫描WWPN,简单粗暴,没技术含量。当然,光交下...

  • seaweedfs使用说明

    基本概念 master 存储映射关系,文件和fid的映射关系 weed masterNode 系统抽象的结点,抽...

  • 14. Elasticsearch动态映射-1

    14.1 映射 类型和字段的信息存储(包含)在映射(mapping)中Elasticsearch支持以下简单字段类...

  • vipaturks1.1 mysql 配置

    1. 启动容器 -p 端口映射:apache 80:80 和 mysql 3316:3306 -v 存储映射 my...

  • Redis实战-Redis五种数据类型(四-5 有序集合)

    5.有序集合  和三类存储着键与值之间的映射类似,有序集合也存储着成员与分值之间的映射,并且提供了分值处理命令,以...

  • Elasticsearch映射配置

    映射介绍 映射是定义存储和索引的文档及其包含的字段的过程。 例如,使用映射来定义: 应将哪些字符串字段视为全文字段...

网友评论

      本文标题:Linux--mmap存储映射

      本文链接:https://www.haomeiwen.com/subject/evxzdjtx.html