Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当文件指针高于(2^32)-1时,Visual Studio 2010对_locking()的调用失败(errno=22)_C++_Visual Studio 2010 - Fatal编程技术网

C++ 当文件指针高于(2^32)-1时,Visual Studio 2010对_locking()的调用失败(errno=22)

C++ 当文件指针高于(2^32)-1时,Visual Studio 2010对_locking()的调用失败(errno=22),c++,visual-studio-2010,C++,Visual Studio 2010,我们有一个目标平台为x86的遗留应用程序。应用程序读取和写入文件,它还锁定文件的区域。该应用程序仅限于写入2gb的文件。但由于我们需要应用程序来支持2gb+,所以我们不得不更改大多数通话。基本上_lseek和_tell64()的位置已更改为_lseeki64()和_tell64()。寻找一个超过(2^32)-1的位置没有任何问题,也可以读取()到该位置。但是,调用_locking()时,返回值为-1,错误号为22 这告诉我_locking()调用无法处理我试图_locking()的偏移量和长度。

我们有一个目标平台为x86的遗留应用程序。应用程序读取和写入文件,它还锁定文件的区域。该应用程序仅限于写入2gb的文件。但由于我们需要应用程序来支持2gb+,所以我们不得不更改大多数通话。基本上_lseek和_tell64()的位置已更改为_lseeki64()和_tell64()。寻找一个超过(2^32)-1的位置没有任何问题,也可以读取()到该位置。但是,调用_locking()时,返回值为-1,错误号为22

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


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

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


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

谢谢,我忘了提到将代码移动到使用WIN32 API将是我的最后一个选择。这些旧posix函数处于维护模式。您必须编写自己的locking64()函数。使用vc/CRT/src中提供的CRT源文件locking.c获取灵感。@HansPassant非常感谢!我不知道为什么我突然想起了这个。。。最后,我查看了v2012工具集源代码,并将其中一个用于锁定,因为它不是我们针对更高工具集的选项。这就是我需要的答案。