win32下使用内存映射文件

文章作者 100test 发表时间 2007:10:26 12:11:09
来源 100Test.Com百考试题网


映射文件把虚拟可寻址空间映射到文件上。整个文件就可以很容易的访问,就像它在内存中一样。但是它实质还是在硬盘中,只是需要的时候载入需要的部分到内存,这样可以节约物理内存的使用。windows 使用 这个来加载EXE和DLL,所以这个因该是高效的。windows下默认的虚拟内存页最小是512KB,所以对512KB以下的文件使用就是多余的低效的。

按照以下步骤使用

1. 调用CreateFile打开您想要映射的文件。
2. 调用CreateFileMapping,其中要求传入先前CreateFile返回的句柄,该函数生成一个建立在CreateFile函数创建的文件对象基础上的内存映射对象。
3. 调用MapViewOfFile函数映射整个文件的一个区域或者整个文件到内存。该函数返回指向映射到内存的第一个字节的指针。
4. 用该指针来读写文件。
5. 调用UnmapViewOfFile来解除文件映射。
6. 调用CloseHandle来关闭内存映射文件。注意必须传入内存映射文件的句柄。
7. 调用CloseHandle来关闭文件。注意必须传入由CreateFile创建的文件的句柄。

/////////////////////////////////////////////
//为了简单 省略错误检查
//建一个test.txt的文本文件做实验
//这里只演示读取操作
//win32 console 程序
//winXP vc6
//write by DKink|棼紫
//2007.10.09

#include "stdafx.h"
#include
#include

int main(int argc, char* argv[])
{

TCHAR *fileName =_T("test.txt").

//--------------------------------------
//打开文件
HANDLE fileHandle = CreateFile(
fileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,//文件必须存在
0,
NULL).

//--------------------------------------
//从文件创建映射对象
HANDLE fileMapping = CreateFileMapping(
fileHandle,
NULL,
PAGE_READONLY,
0,
0,
NULL).
//---------------------------------------
//把文件映射到指针(为什么用char,因为这个大小是一个Byte)
char *fileBase = (char *) MapViewOfFile(
fileMapping,
FILE_MAP_READ,
0,
0,
0).
//---------------------------------------
//使用数据
MessageBox(NULL,fileBase,"MTest",MB_OK).//这句可能有溢出,正常情况误用。

UnmapViewOfFile(fileBase).//解除文件映射

CloseHandle(fileMapping).//关闭内存映射文件

CloseHandle(fileHandle).//关闭文件

return 0.
}

相关文章


常见修改(机器码)
PC技术辅导:断点设置表
汇编语言经典句式
泛型类型的子类及通配符的使用
win32下使用内存映射文件
网络技术:什么是光纤通信
无线局域网用于宽带接入业务解决方案
网络协议基础知识SMTP协议和UDP协议
综合布线的智能实时管理系统
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛