总览 (SYNOPSIS)
#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, fpos_t *pos);
描述 (DESCRIPTION)
函数 fseek 设置 stream 流 的 文件位置 标志. 新的 文件位置 (以 字节 为 单位) 根据 whence 指定的 文件位置 加上 offset 获得. 如果 whence 设置为 SEEK_SET, SEEK_CUR, 或 SEEK_END, 则 对应的 文件位置 分别是 文件开始, 当前位置, 或 文件末尾. 成功 调用 fseek 后, 函数 清除 流 的 文件末尾 标志(end-of-file), 同时 消除 ungetc(3) 函数 对 流 的 影响.
ftell 函数 能够 获取 stream 流 的 当前 文件位置.
rewind 函数 把 stream 流 的 文件位置 设置到 文件开始处. 它 等效于:
- (void)fseek(stream, 0L, SEEK_SET)
另外 它 还能 清除 流 的 错误标志 (见 clearerr(3)).
fgetpos 和 fsetpos 函数 相当于 ftell 和 fseek (whence 设置 为 SEEK_SET) 的 另一种 写法, 读取 当前 文件位置 并 保存在 pos 中, 或用 pos 指向的值 设置 当前 文件位置. 在 某些 非UNIX系统 中, fpos_t 可以 是 一种 复杂的 (数据)对象, 因而 这两个函数 大概是 唯一 可移植的 流定位函数.
返回值 (RETURN VALUE)
rewind 函数 没有 返回值. 如果 操作 成功, fgetpos, fseek, fsetpos 返回 0, 而 ftell 返回 当前 偏移 (当前 文件位置), 否则 返回 -1, 并 设置 全局变量 errno, 指出 错误 类型.
错误 (ERRORS)
- EBADF
- stream 流 不是 可重定位的 流 (non-seekable stream).
- EINVAL
- fseek 的 whence 参数 不是 SEEK_SET, SEEK_END, 或 SEEK_CUR.
fgetpos, fseek, fsetpos, 和 ftell 函数 也可能 失败后, 把 errno 设置为 fflush(3), fstat(2), lseek(2), 和 malloc(3) 的 错误 类型.