gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:08:22 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

关于c++ - 当文件指针高于 (2^32)-1 时,Visual Studio 2010 调用 _locking() 失败 (errno = 22),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46882350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com