VC 中使用内存映射文件处理大文件(2)
时间:2026-01-16
时间:2026-01-16
高中物理教学艺术
作为映射到该区域的物理存储器进行提交。由mapviewoffile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。此时,对内存映射文件的使用和处理同通常加载到内存中的文件数据的处理方式基本一样,在完成了对内存映射文件的使用时,还要通过一系列的操作完成对其的清除和使用过资源的释放。这部分相对比较简单,可以通过unmapviewoffile()完成从进程的地址空间撤消文件数据的映像、通过closehandle()关闭前面创建的文件映射对象和文件对象。
内存映射文件相关函数
在使用内存映射文件时,所使用的api函数主要就是前面提到过的那几个函数,下面分别对其进行介绍:
handle createfile(lpctstr lpfilename,
dword dwdesiredaccess,
dword dwsharemode,
lpsecurity_attributes lpsecurityattributes,
dword dwcreationdisposition,
dword dwflagsandattributes,
handle htemplatefile);
函数createfile()即使是在普通的文件操作时也经常用来创建、打开文件,在处理内存映射文件时,该函数来创建/打开一个文件内核对象,并将其句柄返回,在调用该函数时需要根据是否需要数据读写和文件的共享方式来设置参数dwdesiredaccess和dwsharemode,错误的参数设置将会导致相应操作时的失败。
handle createfilemapping(handle hfile,
lpsecurity_attributes lpfilemappingattributes,
dword flprotect,
dword dwmaximumsizehigh,
dword dwmaximumsizelow,
lpctstr lpname);
createfilemapping()函数创建一个文件映射内核对象,通过参数hfile指定待映射到进程地址空间的文件句柄(该句柄由createfile()函数的返回值获取)。由于内存映射文件的物理存储器实际是存储于磁盘上的一个文件,而不是从系统的页文件中分配的内存,所以系统不会主动为其保留地址空间区域,也不会自动将文件的存储空间映射到该区域,为了让系统能够确定对页面采取何种保护属性,需要通过参数flprotect来设定,保护属性page_readonly、page_readwrite和page_writecopy分别表示文件映射对象被映射后,可以读取、读写文件数据。在使用page_readonly时,必须确保createfile()采用的是generic_read参数;page_readwrite则要求createfile()采用的是generic_read|generic_write参数;至于属性page_writecopy则只需要确保createfile()采用了generic_read和generic_write其中之一即可。dword型的参数dwmaximumsizehigh和dwmaximumsizelow也是相当重要的,指定了文件的最大字节数,由于这两个参数共64位,因此所支持的最大文件长度为16eb,几乎可以满足任何大数据量文件处理场合的要求。
lpvoid mapviewoffile(handle hfilemappingobject,
dword dwdesiredaccess,
dword dwfileoffsethigh,
dword dwfileoffsetlow,
dword dwnumberofbyt
上一篇:美容院顾客档案管理
下一篇:申报五四特色红旗团支部布点课题