• 存储映射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;
    }
    
  • 相关阅读:
    7月31号
    7月29号
    性能优化、微服务、并发编程、开源框架、分布式,面试你还缺什么
    Java 异常_2
    Java 异常浅学
    Java IO浅学
    Java File文件的读写
    Java BufferedReader 控制台输入
    Java 内部类
    Java 动静态绑定
  • 原文地址:https://www.cnblogs.com/cfans1993/p/5701526.html
Copyright © 2020-2023  润新知