windows笔记-页文件支持的内存映射文件

它不必调用CreateFile 函数,只需要调用CreateFileMapping 函数,并且传递 INVALID_HANDLE_VALUE 作为hFile 参数。这将告诉系统,你不是创建其物理存储器驻留在磁盘上的文件中的文件映射对象,相反,你想让系统从它的页文件中提交物理存储器。分配的存储器的 数量由CreateFileMapping 函数的dwMaximumSizeHighdwMaximumSizeLow 两个参数来决定 当创建了文件映射对象并且将它的一个视图映射到进程 的地址空间之后,就可以像使用任何内存区域那样使用它。

如果你想要与其他进程 共享该数据 ,可调用CreateFileMapping 函数,并传递一个以0 结尾的字符串作为pszName 参数。然后,想要访问该存储器的其他进程就可以调用CreateFileMappingOpenFileMapping 函数,并传递相同的名字。(见:跨越进程边界共享内核对象【命名对象】 )


  当进程不再想要访问文件映射对象时,该进程应该调用CloseHandle 函数。当所有句柄均被关闭后,系统将从系统的页文件中收回已经提交的存储器。

// ------------------------------------------------------------

// 文件名     : 17_FileMapping3.cpp

// 创建者     :  方煜宽

//  邮箱       [email protected]

// 创建时间    :  2010-9-6 17:19

// 功能描述    :  页文件支持的内存映射文件

//

// ------------------------------------------------------------

#include "stdafx.h"

#include "windows.h"

#include <iostream>

using namespace std ;

 

int _tmain (int argc , _TCHAR * argv [])

{

   // 它不必调用 CreateFile 函数 , 注释掉

// HANDLE hFile = ::CreateFile(L"C://kuan.txt",

//    GENERIC_READ | GENERIC_WRITE,

//    0,

//    NULL,

//    OPEN_ALWAYS,

//    FILE_ATTRIBUTE_NORMAL,

//    NULL);

 

   // 传递 INVALID_HANDLE_VALUE 作为 hFile 参数

   HANDLE hFileMapping = ::CreateFileMapping (INVALID_HANDLE_VALUE ,

      NULL ,

      PAGE_READWRITE ,

      0, 99,      // 注意这里不能再是 0 了。

      NULL );

 

   PBYTE pbFile1 = (PBYTE )::MapViewOfFile (hFileMapping , FILE_MAP_WRITE , 0, 0, 0);

   PBYTE pbFile2 = (PBYTE )::MapViewOfFile (hFileMapping , FILE_MAP_WRITE , 0, 0, 0);

 

   cout << "View1 " << pbFile1 << endl ;

   cout << "View2 " << pbFile2 << endl ;

 

   // 改变视图

   memcpy (pbFile1 , "fangyukuan" , 10);

 

   // 结果视图和都变了

   cout << "View1 " << pbFile1 << endl ;

   cout << "View2 " << pbFile2 << endl ;

 

 

   ::UnmapViewOfFile (pbFile1 );

   ::UnmapViewOfFile (pbFile2 );

 

   ::CloseHandle (hFileMapping );

   //::CloseHandle(hFile);

 

   return 0;

}

 

 本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/09/09/1822304.html

你可能感兴趣的:(windows,File,null,存储,2010,磁盘)