标签:
一、简介
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
运行
标签:
原文地址:http://www.cnblogs.com/274914765qq/p/4662614.html