fseek中offset的值大于long int

时间:2015-05-09 13:24:11

标签: c system

我们知道fseek的参数是:

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

我想使用偏移值大于long的解决方案什么是解决方案,是否还有其他功能来替换fseek? 值为(512 * 29358080)

1 个答案:

答案 0 :(得分:2)

有一个较新的API可用于巨额抵消int fsetpos(FILE *stream, const fpos_t *pos);int fgetpos(FILE * restrict stream, fpos_t * restrict pos);,但您无法使用它来指定实际偏移量。太糟糕了,标准委员会忽视了这一点。

某些系统具有一组备用的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个偏移。