zoukankan      html  css  js  c++  java
  • C++使用mmap读写文件

    一般流程是先创建或打开一个文件,然后使用mmap进行内存映射。

     

    1. 读取文件

    // 打开文件
    int fd = open("input.txt", O_RDONLY);  
    // 读取文件长度
    int len = lseek(fd,0,SEEK_END);  
    // 建立内存映射
    char *addr = (char *) mmap(NULL, len, PROT_READ, MAP_PRIVATE,fd, 0);      
    close(fd);
    // data用于保存读取的数据
    char* data; 
    // 复制过来
    memcpy(data, addr, len);
    // 解除映射
    munmap(addr, len)

     

    2. 写入文件

    假设写入的数据放在char* data中

    int len = data.length();
    // 打开文件
    int fd=open("output.txt", O_RDWR|O_CREAT, 00777);
    // lseek将文件指针往后移动file_size-1位
    lseek(fd,len-1,SEEK_END);  
    // 从指针处写入一个空字符;mmap不能扩展文件长度,这里相当于预先给文件长度,准备一个空架子
    write(fd, "", 1);
    // 使用mmap函数建立内存映射
    char* addr = (char*)mmap(NULL, len, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);
    // 内存映射建立好了,此时可以关闭文件了
    close(fd);
    // 把data复制到addr里
    memcpy(addr, data, len);
    // 解除映射
    munmap(addr, len)

     

  • 相关阅读:
    实验七---类的多态
    实验六
    实验五---排序、质数
    实验四---杨辉三角
    node中间件KOA函数
    java文件名判断练习
    npm install 安装报错错误问题
    bundle is not defined 手动搭建项目架构(一)
    ztree实现拖拽功能
    js单线程 详解 来自知乎
  • 原文地址:https://www.cnblogs.com/sumuyi/p/12813787.html
Copyright © 2011-2022 走看看