首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当文件指针大于(2^32)-1时,Visual Studio2010调用_locking()失败(错误号= 22)

当文件指针大于(2^32)-1时,Visual Studio2010调用_locking()失败(错误号= 22)
EN

Stack Overflow用户
提问于 2017-10-23 13:12:58
回答 1查看 57关注 0票数 1

我们有一个目标平台是x86的遗留应用程序。应用程序对文件进行读写,它还会锁定文件的区域。该应用程序被限制为只能写入2 2gb的文件。但由于我们需要应用程序来支持2gb+,所以我们不得不更改大多数调用。基本上是_lseek和_tell,其中更改为_lseeki64()和_tell64()。寻找一个超过(2^32)-1的位置没有任何问题,并且对该位置执行read()。但是,在调用_locking()时,我得到的返回值为-1,错误号为22。

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

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

EN

回答 1

Stack Overflow用户

发布于 2017-10-23 13:26:36

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46882350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档