码迷,mamicode.com
首页 > 系统相关 > 详细

内存映像IO-Linux下C编程指南

时间:2014-09-01 22:40:13      阅读:555      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   使用   ar   文件   数据   art   

内存映像是通过将文件映射到内存中去以提高文件读取速度。

此时可以使用指针快速访问文件中的数据

1.

使用的函数

要将外部存储的文件映射到内存中,需要使用

#include<sys/types.h>
#include<sys/mman.h>
void *mmap(void *start.size_t length,int prot,int flag,int fd,off_t offset);

此时,若start不为NULL会将文件映射到此位置,但是不保证一定能成功;

length表示占用内存映像的大小,字节记;

prot表示内存映像的安全属性,可选项为:

PROT_EXEC              //被映射的内存可能可执行  
PROT_NONE              // 被映射的内存不可访问
PROT_READ                //被映射的内存可读
PROT_WRITE            //被映射的内存可写

flag表示内存映像的标志

MAP_FIXED                //若无法在start建立映像,则出错返回
MAP_REIVATE            //对内存的改动不反映到外存文件中
MAP_SHARED            //将内存中的改动保存到外存文件中

off_t表示映像的内容距离文件头的偏移量

 

调用失败返回-1,否则返回映像内存起始地址

****注意需要在进程中打开文件才可以进行映射***

 

2.

修改内存映像的保护值prot

int protect(const void *addr,size_t length,int prot);

成功会返回0,出错返回-1,且会将errno置为它。

 

3.

将内存映像写入外存

int msync(const void *start,size_t length,int flag);

flag的参数选项为:

MS_ASYNC            //调度一个写操作并返回
MS_INVALIDATE       //将映像到相同文件的映像无效以便使其更新为新数据
MS_SYNC             //完成写操作后函数返回

4.

修改映像内存大小

void *mremap(void *old_addr,size_t old_length,size_t new_length,unsigned long flag)

参数flag表示是否在需要时移动映像的位置

调用成功返回映像新地址,否则返回错误值-1

内存映像IO-Linux下C编程指南

标签:style   blog   color   io   使用   ar   文件   数据   art   

原文地址:http://www.cnblogs.com/lhyz/p/3950145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!