内存映射文件偏移低位

3
我正在使用C语言和Visual Studio编写Windows程序。我需要映射一个文件,并从第750个字节处访问它。我尝试了:
pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 750,0)

使用这个方法打开文件,但是返回错误代码1132。

ERROR_MAPPED_ALIGNMENT 1132 (0x46C) 指定的基地址或文件偏移量没有正确对齐。

如何解决这个问题?

3个回答

4
MapViewOfFile的文档非常清楚,偏移量必须是分配粒度(通常为64KB,但可以调用GetSystemInfo方法获取实际值)的倍数。

因此,由于750小于分配粒度,您必须从0开始映射文件。如果您真的需要将指针定位到第750个字节,则只需增加指针即可。

pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,(DWORD) 0,0);
char* pBuffer = pFile + 750;

您需要一个第二个缓冲区,因为您将不得不将 pFile 传递给 UnmapViewOfFile


你是否也想修改调用 MapViewOfFile() 中的 750? - Greg Hewgill

2
我假设您需要从文件的第750个字节开始访问,而不是从此偏移量创建映射。正如您发现的那样,这是不可能的,因为您传递给MapViewOfFile的偏移量必须是系统的"分配粒度"的倍数,您可以通过GetSystemInfo获得该信息,但至少为4kbytes,如果我没记错的话。
您可以创建一个从字节0开始的文件视图,并从返回地址后的750个字节处读取。

1

文件中的偏移量必须是4k的倍数(所以750不可行)。

最好从0开始映射文件,然后从映射地址偏移750。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接