FSEEK(3)

NAME
fgetpos, fseek, fsetpos, ftell, rewind - 重定位某个流

总览 (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) 的 错误 类型.

遵循 (CONFORMING TO)
fgetpos, fsetpos, fseek, ftell, 和 rewind 函数 遵循 ANSI X3.159-1989 (``ANSI C'') 标准.

另见 (SEE ALSO)
lseek(2), fseeko(3)

TRANSBY
LinuxForum.Net CMPP 中文手册页计划 http://cmpp.linuxforum.net

* Fri Aug 20 2004 徐明 <xuming@users.sourceforge.net>
- 初始版本