ftell/ftello、fseek/fseeko、fsetpos/fgetpos、rewind
讲解了在标准IO流中position
(位置)相关函数
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
//Returns: current file position indicator(指示器) if OK, -1L on error
long ftell(FILE *stream);
//Returns:0 if OK, nonzero on error
void rewind(FILE *stream);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
fseek
和ftell
的offset
都是long
型的数。
- 对于二进制文件:
whence
有三个取值SEEK_SET
、SEEK_CUR
、SEEK_END
- 对于文本文件:
whence
必须为SEEK_SET
,offset
只能为两个值,0—代表rewind
到文件开头,或者使用ftell
的返回值
rewind
function sets the file position indicator for the stream pointed to by stream to the beginning of the file. It is equivalent to:(void) fseek(stream, 0L, SEEK_SET)
fseeko, ftello - seek to or report file position
相对于fseek
和ftell
,将offset
的类型从long
换成off_t
#include <stdio.h>
int fseeko(FILE *stream, off_t offset, int whence);
//Returns: current file position indicator if OK, (off_t) -1 on error
off_t ftello(FILE *stream);
//Returns:0 if OK, nonzero on error
- 1
- 2
- 3
- 4
- 5
- 6
回顾3.6节关于off_t
的讨论,off_t
也可以大于32bits
fgetpos、fsetpos
The fgetpos()
and fsetpos()
functions are alternate interfaces equivalent to ftell()
and fseek()
(with whence set to SEEK_SET), setting and storing the current value of the file offset into or from the object referenced by pos.
On some non-UNIX systems, an fpos_t object may be a complex object and these routines may be the only way to portably reposition a text stream.
#include <stdio.h>
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
- 1
- 2
- 3
fgetpos
将file‘s position indicator
的当前值存放到pos
指向的object
中去。 fsetpos
相反