我面临一个与lseek()相关的问题。当我们尝试在Windows(32位机器)中访问2GB +文件时,它会返回失败。是否有任何限制lseek可以在我们正在使用的文件中设置文件指针??? offset valye是2154654555。
编译器详细信息
c:\ Program Files \ Inno Setup 5 \ Compil32.exe
答案 0 :(得分:2)
你应该看看_lseeki64,它需要64位偏移量。 lseek()(及其后继者,_lseek())仅限于带符号的32位偏移,其上限为2147483647.您的偏移量215465455超过了该值(如果存储在long中,将被视为负数) 。见http://msdn.microsoft.com/en-us/library/1yee101t。 (你需要一些与你的编译器相当的东西。)
答案 1 :(得分:1)
off_t的最大值是2147483647,其中off_t是lseek()中偏移的类型
答案 2 :(得分:1)
lseek不适用于大于2 GB的文件,因为偏移量输入是32位变量,其值不能大于2147483647.在许多操作系统中,它通过编译时宏或通过提供替代功能来支持。
如果是MSVC编译器,您可以尝试_lseeki64。偏移需要64位变量。由于您没有使用MSVC,因此可以检查等效功能。