#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> int main(int argc,char *argv[]) { if(argc != 2) { printf("error args "); return -1; } int fd = open(argv[1],O_RDWR); struct stat s; fstat(fd,&s); char *p; p = (char*)mmap(NULL,s.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); if((char*)-1 == p) { perror("mmap"); return -1; } while(1); p[0] = 'H'; int ret = munmap(p,s.st_size); if(-1 == ret) { perror("mnumap"); } return 0; }
演示:映射1个g的文件,程序异常退出,并没有运行munmap函数,文件映射的内存会一直存在,删除此文件后,内存会被清理