我们知道fseek的参数是:
int fseek(FILE *stream, long int offset, int whence)
我想使用偏移值大于long的解决方案什么是解决方案,是否还有其他功能来替换fseek? 值为(512 * 29358080)
答案 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个偏移。