linux C学习笔记04--内存映射
内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善:
/************************************************************************* > File Name: memory_map.c > Author: hailin.ma > Mail: mhl2018@126.com > Created Time: Thu 28 May 2015 08:20:50 AM CST ************************************************************************/ #include<stdio.h> #include <sys/mman.h> #include <fcntl.h> #include <string.h> #define MEM_MAP_SIZE 1000 int memory_map() { char * pmap = NULL; int fd; char rdbuf[100] = "\0"; fd = open("memory.txt",O_RDWR|O_CREAT|O_TRUNC,0660); if(fd == -1) { perror("open error"); return -1; } write(fd,"hello world!",MEM_MAP_SIZE); //write data to file,the write size must as long as MEM_MAP_SIZE pmap = mmap(NULL,MEM_MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); //map memory with file printf("the memory is: %s\n",pmap); memset(pmap,'a',MEM_MAP_SIZE); memcpy(pmap,"this is memory map",18); //try to chang any charactor in memory lseek(fd,0,SEEK_SET); //move fd pointer to begin section memset(rdbuf,0,sizeof(rdbuf)); read(fd,rdbuf,100); //read the context in file printf("the file is: %s\n",rdbuf); munmap(pmap,10); close(fd); return 0; }
main函数调用后运行效果图: