名称
fgetpos, fseek, fsetpos, ftell, rewind - 重新定位流
概要
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
void rewind(FILE *stream);
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
说明
fseek设置流的文件位置指示器。以字节为单位,新的位置由whence指定的位置
加上offset个字节的偏移决定。whence为SEEK_SET,SEEK_CUR或者SEEK_END,
分别表示偏移是相对于文件起始位置,当前位置,或者文件末尾。调用函数fseek
成功则清除流的EOF标志并且撤销函数ungetc对流产生的所有影响。
ftell获取流的当前文件位置指示器的值。
rewind设置文件位置指示器指向文件起始位置,除了流的错误标志也被清除之外
(参考clearerr),该函数调用等价于:(void) fseek(stream, 0L, SEEK_SET)。
fgetpos和fsetpos是ftell和fseek(whence等于SEEK_SET)的替代函数,设置文件
位置偏移值为pos指向的对象的值,或者将文件位置偏移值保存到pos指向的对象。
在一些非UNIX系统中,fpos_t可能是一个复杂的数据类型,并且这些函数是重新
定位流的唯一可移植方法。
返回值
rewind不返回值。如果成功,fgetpos,fseek,fsetpos返回0、ftell返回当前的文件
位置偏移值,失败则返回-1并且errno被设置为对应的错误码。
错误码
EBADF 流不可做位置偏移操作。
EINVAL 参数whence不是SEEK_SET,SEEK_CUR或者SEEK_END,或者最终的文件
偏移值为负数。
fgetpos,fseek,fsetpos,ftell,也可能会因为fflush,fstat,lseek,malloc失败而失
败,此时errno为对应的错误值。
线程安全特征
接口 | 特征 | 值 |
fseek(), ftell(), rewind(), fgetpos(), fsetpos() | 线程安全 | 多线程安全 |
标准
遵循POSIX.1-2001, POSIX.1-2008, C89, C99。
推荐阅读
lseek,fseeko
版本记录
这个页面是Linux man-pages项目4.04版本的一部分。关于该项目的信息和bug报
道可以在该网站找到:http://www.kernel.org/doc/man-pages/。
2015-08-08