• mmap()函数学习


    #include <stdio.h>
    #include <sys/mman.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <string.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[]) {
        char *addr;
        int fd;
        struct stat sb;
    
        if(argc !=2 || strcmp(argv[1], "--help") == 0) {
            printf("%s file
    ", argv[0]);
            return -1;
        }
    
        fd = open(argv[1], O_RDONLY);
        if(fd == -1) {
            fprintf(stderr, "open error.");
            return -1;
        }
    
        if(fstat(fd, &sb) == -1) {
            fprintf(stderr, "fstat error.");
            return -1;
        }
    
        addr = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
        if(addr == MAP_FAILED) {
            fprintf(stderr, "mmap error.");
            return -1;
        }
    
        if(write(STDOUT_FILENO, addr, sb.st_size) != sb.st_size) {
            fprintf(stderr, "write error.");
            return -1;
        }
    
        return 0;
    }

    成功时mmap()返回新映射的起始地址。发生错误时会返回MAP_FAILED。

    如上代码是创建一个私有文件映射。

    MAP_PRIVATE私有映射,在映射内容上发生的变更对其他进程不可见,对于文件映射来讲,

    变更将不会在底层文件上进行,也被称为写时复制映射。

  • 相关阅读:
    机器学习---14
    机器学习---13
    机器学习--10
    机器学习--9
    机器学习--8
    机器学习--7
    机械学习--6
    大数据应用技术课程实践--选题与实践方案
    15.手写数字识别-小数据集
    14.深度学习-卷积
  • 原文地址:https://www.cnblogs.com/donggongdechen/p/15011242.html
Copyright © 2020-2023  润新知