mmap()的理解
来源:互联网 发布:某酒店2000w数据.rar 编辑:程序博客网 时间:2024/05/08 19:00
/*
学会测试第一个bug mmap(); 首先得学习mmap原理,然后简单的编写个代码用下mmap;
SQ 2014-04-28
*/
原理篇:
Linux中的传统文件访问方式是, 首先用open系统调用打开文件,然后使用read,write以及lseek等调用进行顺序或者随即的I/O.这种方式是非常低效的,每一次I/O操作都需要一次系统调用。另外,如果若干个进程访问同一个文件,每个进程都要在自己的地址空间维护一个副本,浪费了内存空间。而如果能够通过一定的机制将页面映射到进程的地址空间中,也就是说首先通过简单的产生某些内存管理数据结构完成映射的创建。当进程访问页面时产生一个缺页中断,内核将页面读入内存并且更新页表指向该页面。而且这种方式非常方便于同一副本的共享。
代码篇:
#include <sys/mman.h>
#include <stdio.h>
#include<sys/fcntl.h>
#include<string.h>
int main(int argc, char **argv)
{
int fd;
char *mapped_mem, * p;
int flength = 1024;
void * start_addr = 0;
fd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); //打开一个文件
flength = lseek(fd, 1, SEEK_END); //设置当前偏移量为 sizeof(file)+1;
write(fd, "\0", 1); //往文件中的最后一个字节中写入\0;
lseek(fd, 0, SEEK_SET); //设置当前的偏移量为0;
mapped_mem = mmap(NULL, flength, PROT_WRITE ,MAP_SHARED, fd, 0);
printf("%s\n", mapped_mem); //读取内存值
char buf[]="yes,ok!\0";
strncpy( mapped_mem , buf, sizeof(buf) ); //写入数据并且更新到文件
close(fd);
munmap(mapped_mem, flength);
return 0;
}
- mmap 的理解
- mmap()的理解
- 理解mmap
- 内存映射函数mmap的初步理解
- mmap函数共享内存的理解
- linux中mmap函数的理解
- 对于mmap函数错误的理解
- 理解java中的mmap
- 深入理解mmap
- mmap的使用
- mmap 的使用
- java的Mmap二三事
- mmap的使用
- mmap的使用
- mmap函数的使用
- mmap的使用
- mmap函数的使用
- mmap的使用
- makefile速成--总结性学习
- 排序算法(三)选择排序
- STL vector
- java中dao层和service层 再去别人的感觉讲的很好
- uchome 基本文件及功能介绍
- mmap()的理解
- 自适应simpson公式解定积分
- UNPV3读书笔记--第四章基本套接字编程
- C#——数据类型转换
- HDU2852 KiKi's K-Number 树状数组+二分
- c++ primer阅读笔记-15章-7
- java基础——多线程
- Prime Ring Problem(DFS)
- 程序员必备素质