fseek 中偏移值大于 long int

value of offset bigger than long int in fseek

我们知道fseek的参数是:

int fseek(FILE *stream, long int offset, int whence)

我想用一个大于 long int 的偏移值来使用它,解决方案是什么?是否有任何其他函数可以替代 fseek? 值为 (512 * 29358080)

有一个更新的 API 用于巨大的偏移量,int fsetpos(FILE *stream, const fpos_t *pos);int fgetpos(FILE * restrict stream, fpos_t * restrict pos); 但您不能使用它来指定 actual 偏移量。可惜标准委员会忽略了这一点。

一些系统有一组备用的 FILE 定位函数,具有更大的偏移量:

int   fseeko(FILE *stream, off_t offset, int whence);
off_t ftello(FILE *stream);

如果您的系统有这些并且 off_t 是 64 位,这是您最好的选择。

另一个解决方案是使用 fseek(fp, offset, SEEK_CUR); 多次移动文件指针,直到到达所需位置。不能保证它会工作,但您可以尝试验证您的系统的 C 库是否支持标准流的 64 个偏移量。