Visual Studio 2010 调用 _locking() 失败 (errno = 22) 当文件指针高于 (2^

Visual Studio 2010 Call to _locking() failing (errno = 22) when file pointer is above (2^32)-1

本文关键字:文件 指针 高于 失败 2010 Studio 调用 Visual locking errno      更新时间:2023-10-16

我们有一个遗留应用程序,其目标平台是x86。应用程序读取和写入文件,它还锁定文件的区域。该应用程序仅限于写入 2GB 的文件。但由于我们需要应用程序来支持 2gb+,我们不得不更改大部分呼叫。基本上_lseek和_tell更改为_lseeki64()和_tell64()。寻找超过 (2^32)-1 的位置没有任何问题,以及 read() 到该位置。但是,当调用 _locking() 时,我得到的返回值为 -1,errno 为 22。

这告诉我,_locking() 调用无法处理我尝试_locking() 的偏移量和长度。我尝试以 x64 为目标,但看起来工具集 v100 仍然没有针对我需要的 64 位库版本的 io.h。

我知道这是一个模糊的问题,但是有没有办法解决这个问题,我的最后一个选择是移植代码以使用 WIN32 API?

您需要

将代码移植到等效的 WIN32 API 函数,而不是使用 CRT 库。然后,您可以使用支持锁定(2^64)-1的锁定文件功能。

大多数 CRT 函数都具有直接等效的 WIN32 函数,因此移植代码并不困难。但我建议进行彻底的测试,以发现CRT和WIN32之间的特性。