存储映射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;
}
原文地址:https://www.cnblogs.com/cfans1993/p/5701526.html