一、簡介
Linux提供了內存映射函數mmap, 它把文件內容映射到一段內存上(准確說是虛擬內存上), 通過對這段內存的讀取和修改, 實現對文件的讀取和修改, 先來看一下mmap的函數聲明:
下面說一下內存映射的步驟:
注意事項:
在修改映射的文件時, 只能在原長度上修改, 不能增加文件長度, 因為內存是已經分配好的.
二、示例
example1.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<error.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
int fd,len;
char *ptr;
if(argc<2)
{
printf("please enter a file\n");
return 0;
}
if((fd=open(argv[1],O_RDWR))<0)
{
perror("open file error");
return -1;
}
len=lseek(fd,0,SEEK_END);
ptr=mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);//讀寫得和open函數的標志相一致,否則會報錯
if(ptr==MAP_FAILED)
{
perror("mmap error");
close(fd);
return -1;
}
close(fd);//關閉文件也ok
printf("length is %d\n",strlen(ptr));
printf("the %s content is:\n%s\n",argv[1],ptr);
ptr[0]='c';//修改其中的一個內容
printf("the %s content is:\n%s\n",argv[1],ptr);
munmap(ptr,len);//將改變的文件寫入內存
return 0;
}
編譯
gcc -g -o example1 example1.c
運行