我们有一个目标平台是x86的遗留应用程序。应用程序对文件进行读写,它还会锁定文件的区域。该应用程序被限制为只能写入2 2gb的文件。但由于我们需要应用程序来支持2gb+,所以我们不得不更改大多数调用。基本上是_lseek和_tell,其中更改为_lseeki64()和_tell64()。寻找一个超过(2^32)-1的位置没有任何问题,并且对该位置执行read()。但是,在调用_locking()时,我得到的返回值为-1,错误号为22。
这告诉我,_locking()调用不能处理我尝试_locking()的偏移量和长度。我尝试以x64为目标,但看起来工具集v100仍然没有针对我所需的64位版本的库的io.h。
我知道这是一个模糊的问题,但有没有办法解决这个问题,我的最后一个选择是移植代码以使用WIN32应用程序接口?
发布于 2017-10-23 13:26:36
您需要将代码移植到等效的WIN32 API函数,而不是使用CRT库。然后你可以使用LockFile函数,它支持锁定到(2^64) - 1。
大多数CRT函数都有一个直接等效的WIN32函数,因此移植代码并不困难。但我建议进行彻底的测试,以揭示CRT和WIN32之间的特性。
https://stackoverflow.com/questions/46882350
复制相似问题