将大于long类型最大值的值传递给C中的fseek

use*_*633 5 c c++ objective-c

我需要将一些值传递给fseek()C中的方法,该值大于signed long类型的最大值(2147483647).但如果我喜欢下面结果的值是-1,这是不成功的.无论如何我能做到这一点吗?

//fp is the pointer to fopen method
unsigned long long index=2147483648;
int status = fseek(fp, index, SEEK_SET);
Run Code Online (Sandbox Code Playgroud)

Mic*_*ann 9

既然你用"Objective-C"标记了它,我假设你也在考虑使用Macintosh.

退房fseeko(需要64位数字).


Mys*_*ial 7

您需要使用64位版本fseek():

并为lseek():

  • 视窗: _lseeki64()
  • Linux:lseek()#define _FILE_OFFSET_BITS 64-D_FILE_OFFSET_BITS=64

还有lseek64(),但正如@R所提到的那样(见评论),不应该使用它.

  • `lseek64`是`lseek`的64位版本,而不是`fseek`,但也许更重要的是它永远不应该被使用.而是使用`-D_FILE_OFFSET_BITS = 64`编译**所有**(这甚至不应该是一个选项;它应该是默认的,你应该把它放在你的所有项目makefile中)并使​​用标准函数`fseeko`. (2认同)