Creating a File View

创建文件视图

为了映射一个文件的数据到进程的虚拟内存,你必须创建一个文件的视图。MapViewofFileMapViewofFileEX使用CreateFileMapping返回的句柄,在虚拟地址空间创建一个文件或者文件一部分的视图。 当访问标志(access flag)与CreateFileMapping创建内存映射对象时所规定的标志不一致时,函数会失败。

MapViewofFile函数返回一个指向文件视图的指针。通过解引用一个在MapViewofFile中声明的地址范围的指针,一个应用可以从文件中读数据并写数据到文件。写数据到文件视图导致了文件映射对象的改变。对磁盘文件实质的写入是由系统控制的。当文件映射对象被写入的时候数据实际上并没有被写到文件中。相反,大多数的文件输入和输出都被缓存了下来用于提高系统通用性能。系统可以通过调用FlushViewofFile覆盖这种行为,强迫系统立刻执行磁盘转换。

MapViewofFileEx函数和MapViewofFile函数工作原理基本一样,除了它可以通过lpvBase参数来声明,在进程虚拟地址空间,文件视图的基地址。如果在声明的地址上没有足够的空间,,这个调用会失败。因此,如果你在多进程中必须映射一个文件到相同的地址,那么进程间需要协商一个合适的地址。lpvBase参数必须是系统内存分配粒度(system memory allocation granularity )的整数倍否则调用会失败。为了获取系统内存分配粒度,使用GetSystemInfo函数,它填充SYSTEM_INFO结构的成员。

一个应用可以创建同一个文件映射对象的多个视图。一个文件视图可以和它所来自的文件映射对象有不同的大小,但是必须小于文件映射对象。MapViewofFile中由dwOffsetHigh和dwOffsetLow参数所声明的偏移必须是系统粒度的整数倍。

原文地址:https://www.cnblogs.com/zhenghao2/p/6515037.html