创建文件视图
若要将数据从文件映射到进程的虚拟内存,必须创建文件的视图。 MapViewOfFile 和 MapViewOfFileEx 函数使用 CreateFileMapping 返回的文件映射对象句柄在进程的虚拟地址空间中创建文件视图或文件的一部分。 如果访问标志与 CreateFileMapping 创建文件映射对象时指定的访问标志冲突,则这些函数失败。
MapViewOfFile 函数返回指向文件视图的指针。 通过取消引用 MapViewOfFile 中指定的地址范围内的指针,应用程序可以从文件读取数据并将数据写入文件。 写入文件视图会导致对文件映射对象进行更改。 对磁盘上的文件的实际写入由系统处理。 在写入文件映射对象时,实际上不会传输数据。 而是缓存大部分文件输入和输出 (I/O) 以提高一般系统性能。 应用程序可以通过调用 FlushViewOfFile 函数来替代此行为,以强制系统立即执行磁盘事务。
MapViewOfFileEx 函数的工作方式与 MapViewOfFile 函数完全相同,只不过它允许进程在 lpvBase 参数的虚拟地址空间中指定文件视图的基址。 如果指定地址没有足够的空间,则调用将失败。 因此,如果必须将文件映射到多个进程中的同一地址,则进程应协商相应的地址: lpvBase 参数必须是系统内存分配粒度的整数倍数,否则调用将失败。 若要获取系统的内存分配粒度,请使用 GetSystemInfo 函数,该函数填充 SYSTEM_INFO 结构的成员。
应用程序可以从同一文件映射对象创建多个文件视图。 文件视图的大小可以不同于派生它所基于的文件映射对象,但它必须小于文件映射对象。 MapViewOfFile 的 dwOffsetHigh 和 dwOffsetLow 参数指定的偏移量必须是系统分配粒度的倍数。
相关主题