内存映射mmap的几个api及其使用
内存映射 mmap
内存映射mmap函数的作用是建立一段可以被两个或者多个程度读写的内存段,一个程序对他进行任何修改,对其它程序可见。同样,这个功能可以用在对文件的处理上,mmap函数创建一个指向一个内存区域的指针,该内存区域与可以通过一个打开的文件描述符访问的文件的内容相关联。
一、mmap函数
#include <sys/mman.h>
void *mmap(void *addr,size_t len,int prot,int flags,int filedes,off_t off);
参数说明:
1、addr:用来请求使用某个特定的内存地址。如果他取0,结果指针就将自动分配(这是推荐的做法)。否则会降低程序的可移植性,
因为不同系统的可用地址范围不一样。
2、len:可以访问的数量,即内存段的大小。
3、prot:用于设置内存段访问的权限
PROT_READ:允许读该内存段
PROT_WRITE:允许写该内存段
PROT_EXEC:允许执行该内存段
PROT_NONE:不能访问
4、flags:控制程序对内存段的改变所造成的影响
MAP_PRIVATE:内存段私有,对它的修改值对本进程有效
MAP_SHARED:把对该内存段的修改保存到磁盘文件中
MAP_FIXED:该内存段必须位于addr指定的地址处
5、filedes:打开的文件描述符
6、off:用以改变经共享内存段访问的文件中数据的起始偏移值
二、msync函数
#include <sys/mman.h>
int msync(void *addr,size_t len,int flags);
参数说明:
1、addr:共享内存起始位置
2、len: 映射的文件的长度
3、flags:控制执行修改的方式
MS_ASYNC 采用异步
MS_SYNC 采用同步
MS_INVALIDATE 从文件中读回数据
三、munmap函数—— 释放内存段
#include <sys/mman.h>
int munmap(void *addr,size_t len);
参数说明:
1、addr:共享内存起始位置
2、len: 映射的文件的长度
API的使用例子:
#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdlib.h> typedef struct record
{
int data;
char string[];
}RECORD; #define N (100)
int main()
{
RECORD rec,*mapped;
int i,f;
FILE *fp;
fp = fopen("records.dat","w+");//以写的方式打开一个文件
for(i=;i<N;i++)
{
rec.data = i;
sprintf(rec.string,"RECORD-%d",i);
fwrite(&rec,sizeof(RECORD),,fp);//向文件中写一个记录
}
fclose(fp);
/////////////////////////////////////////////////////////// f = open("records.dat",O_RDWR);//以读写的方式打开一个文件描述符
mmaped = (RECORD*)mmap(,N*sizeof(RECORD),PROT_WRITE|PROT_READ,MAP_SHARED,f,);//映射
mmaped[].data = ;//修改第43个记录的整型部分
sprintf(mmaped[].string,"RECORD-%d",mmaped[].data);//修改字符串部分
msync((void*)mmaped,N*sizeof(RECORD),MS_ASYNC);//将修改同步到文件
munmap((void*)mmaped,N*sizeof(RECORD));//释放内存段
close(f);//关闭文件描述符
return ;
}
内存映射mmap的几个api及其使用的更多相关文章
- 深入理解内存映射mmap
内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系,这篇细说一下mmap的一些要点. 修改(2015-11-12):Linux的虚拟内存管理是基于mmap来实现 ...
- [转载]linux内存映射mmap原理分析【转】
转自:http://www.cnblogs.com/wanpengcoder/articles/5306688.html 转自:http://blog.csdn.net/yusiguyuan/arti ...
- 计算机底层知识拾遗(九)深入理解内存映射mmap
内存映射mmap是Linux内核的一个重要机制,它和虚拟内存管理以及文件IO都有直接的关系,这篇细说一下mmap的一些要点. 修改(2015-11-12):Linux的虚拟内存管理是基于mmap来实现 ...
- 内存映射MMAP和DMA【转】
转自:http://blog.csdn.net/zhoudengqing/article/details/41654293 版权声明:本文为博主原创文章,未经博主允许不得转载. 这一章介绍Linux内 ...
- 内存映射mmap
Table of Contents 1. 什么是mmap 2. 使用方法 2.1. mmap构造器的格式 2.2. 例子1 2.3. 例子2 3. 其它 4. 参考资料 什么是mmap 通常在Unix ...
- Linux内存映射(mmap)系列(1)
看到同事的代码中出现了mmap.所以自己私下学习学习,研究研究..... http://www.cnblogs.com/lknlfy/archive/2012/04/27/2473804.html ( ...
- Linux内存映射--mmap函数
Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明: 头文件: < ...
- linux mmap 内存映射【转】
转自:http://blog.csdn.net/xyyangkun/article/details/7830313 [-] mmap vs readwritelseek mmap vs malloc ...
- mmap内存映射
http://blog.csdn.net/kongdefei5000/article/details/70183119 内存映射是个很有用,也很有意思的思想.我们都知道操作系统分为用户态和内核态,用户 ...
随机推荐
- Hadoop-2.6.5安装
简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个分布式文 ...
- DRBD的主备安装配置
drbd软件包链接:https://pan.baidu.com/s/1eUcXVyU 密码:00ul 1.使用的资源:1.1 系统centos6.9 mini1.2 两台节点主机node1.node2 ...
- 文本与二进制关于\n的问题
文本文件中: text = open(path, "r");windows中的换行符\n,在文件中windows在存储的时候会将它看成\r\n存储,用r在读取大小时会忽略\r的大小 ...
- 【Java】泛型学习笔记
参考书籍 <Java核心技术:卷1> 泛型, 先睹为快 先通过一个简单的例子说明下Java中泛型的用法: 泛型的基本形式类似于模板, 通过一个类型参数T, 你可以"私人定制&qu ...
- [SQL] 函数整理(T-SQL 版)
函数整理(T-SQL 版) 一.数学函数 1.求绝对值 ABS() 函数用来返回一个数值的绝对值. SELECT ABS(-5.38) AS absValue; 2.求指数 POWER() 函数是用 ...
- Install MongoDB on Linux Systems 速记
下载mongodb最新版本: 下载链接:http://pan.baidu.com/s/1kTDnkyz curl -O http://downloads.mongodb.org/linux/mongo ...
- iOS-状态栏字体颜色【白色】【Xcode9.1】
Xcode9之前 设置状态栏颜色首先在info.plist文件中,加入UIViewControllerBasedStatusBarAppearance = false: <key>UIVi ...
- HDU 5608 function [杜教筛]
HDU 5608 function 题意:数论函数满足\(N^2-3N+2=\sum_{d|N} f(d)\),求前缀和 裸题-连卷上\(1\)都告诉你了 预处理\(S(n)\)的话反演一下用枚举倍数 ...
- POJ Ikki's Story IV - Panda's Trick [2-SAT]
题意: 圆上n个点,m对点之间连边,连在园内或园外,所有边不相交是否可行 发现两对点连线都在内相交则都在外也相交,那么只有一个在内一个在外啦,转化为$2-SAT$问题 #include <ios ...
- 《Web Scraping With Python》Chapter 2的学习笔记
You Don't Always Need a Hammer When Michelangelo was asked how he could sculpt a work of art as mast ...