0

可能重复:
关于文件搜索位置的问题

我面临一个与 lseek() 相关的问题。如果我们尝试在 Windows(32 位机器)中访问 2GB+ 文件,它会返回失败。lseek 可以在我们正在使用的文件中设置文件指针是否有任何限制???偏移值是 2154654555。

编译器详细信息

c:\Program Files\Inno Setup 5\Compil32.exe

4

3 回答 3

2

您应该看看 _lseeki64,它采用 64 位偏移量。lseek()(及其后继者 _lseek())仅限于带符号的 32 位偏移量,其上限为 2147483647。您的 215465455 偏移量超过了该值(如果存储在 long 中,将被视为负数) . 请参阅http://msdn.microsoft.com/en-us/library/1yee101t。(你的编译器需要类似的东西。)

于 2012-05-29T14:27:16.750 回答
1

off_t 的最大值为 2147483647,其中 off_t 是 lseek() 中偏移量的类型

于 2012-05-29T14:26:35.360 回答
1

lseek 不适用于大于 2 GB 的文件,因为偏移量输入位于 32 位变量上,该变量不能取大于 2147483647 的值。在许多操作系统中,它要么通过编译时宏支持,要么通过提供替代函数来支持。

如果是 MSVC 编译器,您可以尝试_lseeki64。偏移量需要 64 位变量。由于您没有使用 MSVC,因此您可以检查等效功能。

于 2012-05-29T14:26:50.880 回答