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 个偏移量。
我们知道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 个偏移量。