内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善:
/*************************************************************************
> 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函数调用后运行效果图: