Linux下mmap函数的一个练习
2011-10-17 17:58
471 查看
mmap函数用来将文件映射进内存。需要指出的是这里的内存指的是虚拟内存。
mmap函数可以将一个文件的内容映射到内存,这样就可以直接对该内存进行操作,从而省去IO操作。
下面是一个小例子:
关于虚拟内存的概念可以查看http://zh.wikipedia.org/wiki/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98,里面有简单的介绍
mmap函数可以将一个文件的内容映射到内存,这样就可以直接对该内存进行操作,从而省去IO操作。
下面是一个小例子:
#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; }
关于虚拟内存的概念可以查看http://zh.wikipedia.org/wiki/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98,里面有简单的介绍
相关文章推荐
- Linux_C练习:请编写一个c函数,该函数给出一个字节中被置为1的位的个数;(位运算)
- Linux_C练习:编写一个函数,求字符数组的前n个字符中最大字符的地址并返回该地址,字符数组和n作为函数的参数;
- Linux下shell脚本中信号捕获和函数练习脚本之ping一个网段
- 随手写了一个linux服务端与window客户端的epoll程序,当做练习把。
- linux中fork函数的一个小思考
- Linux脚本设计练习2——一个游戏菜单的简单实现
- Linux系统调用-- mmap/munmap函数详解
- Linux那些事儿之我是UHCI(10)一个函数引发的故事(一)
- Linux的shell脚本的语句,函数,检测服务,启动脚本的练习
- Linux那些事儿之我是UHCI(14)一个函数引发的故事(五)
- 实现一个简单类似linux上cat命令的功能函数
- linux-mmap函数的介绍
- Linux-mmap函数介绍
- 练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。
- 一个关于linux进程函数kill的问题
- APUE-文件与目录:一个LINUX用户登陆函数
- Linux 内存映射函数 mmap()函数详解
- Linux那些事儿之我是UHCI(11)一个函数引发的故事(二)
- linux设备驱动之mmap函数
- linux下练习 c++ 特殊容器、特殊函数的使用