• 存储映射IO


    mmap

    将文件映射到内存, 对这块内存的修改会自动同步到相应的文件中

    void *mmap(void *addr, size_t len, int prot, int flag, int fd, off_t off)
    返回值为void *, 也就是映射内存的首地址
    void *addr, 一般直接填0, 表示由系统自动分配合适大小的内存
    size_t len, 文件映射的长度
    int prot, 读写属性PROT_READ, PROT_WRITE, PROT_EXEC, PROT_NONE
    int flag, 一般指定为MAP_SHARED
    int fd, 要映射的文件描述符
    off_t  off, 文件映射的偏移位置
    
    int mprotect(void *addr, size_t len, int prot)
    修改已经打开的mmap的读写权限
    
    int msync(void *addr, size_t len, int flags)
    与标准io的fflush类似, msync用于将内存修改立即写回文件
    
    int nunmap(void *addr, size_t len)
    释放映射的内存
    

    例子:用mmap将文件映射到内存, 然后用puts打印出来

    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <sys/mman.h>
     
    int main(int argc, char *argv[]){
        int fdin;
        void *src;
        struct stat statbuf;
     
        if((fdin=open(argv[1],O_RDONLY)) <0)
            exit(1); 
        if(fstat(fdin,&statbuf)<0)
            exit(1); 
        if((src=mmap(0,statbuf.st_size,PROT_READ,MAP_SHARED,fdin,0)) == MAP_FAILED)
            exit(1);
        puts(src);
        return 0;
    }
    
  • 相关阅读:
    Bzoj3555: [Ctsc2014]企鹅QQ
    Bzoj4259: 残缺的字符串
    CF528D Fuzzy Search
    Bzoj2738: 矩阵乘法
    Bzoj3309: DZY Loves Math
    Bzoj4540: [Hnoi2016]序列
    Bzoj2329: [HNOI2011]括号修复
    Bzoj1923: [Sdoi2010]外星千足虫
    Bzoj4004: [JLOI2015]装备购买
    Bzoj1951: [Sdoi2010]古代猪文
  • 原文地址:https://www.cnblogs.com/cfans1993/p/5701526.html
Copyright © 2020-2023  润新知