Visual Studio 2010 调用 _locking() 失败 (errno = 22) 当文件指针高于 (2^
Visual Studio 2010 Call to _locking() failing (errno = 22) when file pointer is above (2^32)-1
我们有一个遗留应用程序,其目标平台是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之间的特性。
相关文章:
- 为什么当我尝试将char输入到int时,文件指针会卡住
- fprintf 不打印到文件,当文件指针在其他地方声明时
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- 尽管文件指针正确,但在fclose()期间的segfault
- 当调用FREAD()函数时,文件指针如何移动
- C++如何复制文件 * 指针
- 如何将文件描述符 (int fd) 转换为文件指针 ( 文件* fp )
- Visual Studio 2010 调用 _locking() 失败 (errno = 22) 当文件指针高于 (2^
- 如何在 c++ 中查找文件指针位置
- c++文件指针工作不正常
- 做一个popen(),将文件*指针放入fstream中,pclose()呢?
- 在Linux中,多个进程使用文件指针读取文件时使用的共享虚拟内存
- 无法声明文件指针数组
- 将文件指针重定向到C/C++中的字符串
- 如何检查文件指针/描述符/句柄是否关联到同一个文件/管道/终端
- 在记录中定位文件指针
- 流和文件指针移动
- 如何将文件指针移回一个整数
- C++ 如何使用文件指针以增量方式写入文件
- 为什么std::istream::read不根据读取的字节移动文件指针