有三种方法定位标准I/O流。
- ftell和fseek函数。它们都假定文件的位置可以存放在一个长整型中。
- ftello和fseeko函数。可以使文件偏移量不必一定使用长整型。它们使用off_t数据类型代替了长整型。
- fgetpos和fsetpos函数。这两个函数是由ISO C引入的。它们使用一个抽象数据类型fpos_t记录文件的位置。这种数据类型可以定义为记录一个位置所需的长度。
- #include <stdio.h>
- long ftell(FILE *fp);
返回值:成功返回当前文件位置指示,出错返回-1L
- int fseek(FILE *fp, long offset, int whence);
返回值:成功返回0,出错返回非0值
- void rewind(FILE *fp);
对于文本文件,它们的文件当前位置可能不以简单的字节偏移量来度量。为了定位一个文本文件,whence一定要是SEEK_SET,而且offset只能有两种值:0(绕回到文件的起始位置),或是对该文件调用ftell所返回的值。使用rewind函数也可将一个流设置到文件的起始位置。
除了offset的类型off_t而非long以外,ftello函数与ftell相同,fseeko函数与fseek相同。
- #include <stdio.h>
- off_t ftello(FILE *fp);
返回值:成功返回当前文件位置指示,出错返回-1
- int fseeko(FILE *fp, off_t offset, int whence);
返回值:成功返回0,出错返回非0值
- #include <stdio.h>
- int fgetpos(FILE *restrict fp, fpos_t *restrict pos);
- int fsetpos(FILE *restrict fp, const fpos_t *pos);
返回值:成功返回0,出错返回非0值
fgetpoos将文件位置指示器的当前值存入由pos指向的对象中。在以后调用fsetpos时,可以使用此值将流重新定位至该位置。