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() 関数は
stream
によって指定されたストリームにおいて、ファイル位置表示子
(file position indicator)
をセットする。新たな位置
(バイト単位) は
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)
ただし
rewind()
ではストリームに対するエラー表示子
(error indicator) も同時に
クリアされる (
clearerr(3)
を見よ)。
fgetpos() 関数と
fsetpos()
関数は、それぞれ
ftell() と
fseek() で
whence に
SEEK_SET
を指定した場合と同様の機能を、異なるインターフェースで提供する。
fgetpos()
はファイルオフセットの現在の値を
pos
が参照するオブジェクトに保存し、
fsetpos()
はファイルオフセットを
pos に設定する。 UNIX
以外のシステムにおいては、
fpos_t
が構造体などの複雑なオブジェクトになっていて、これらのルーチンがテキス
トストリームでファイル位置を変更する方法のうち、移植性のある唯一のもの
になっている場合もある。
rewind()
は返り値を持たない。
fgetpos(),
fseek(),
fsetpos()
は成功すると 0
を返す。
ftell()
は現在のオフセットを返す。失敗した場合は返り値は
-1 となり、
errno
にエラーを示す値がセットされる。
- EINVAL
-
fseek()
関数に対して与えた
whence 引数が SEEK_SET, SEEK_END,
SEEK_CUR
以外の値であった。
または、更新後のファイルオフセットが負になってしまう。
- ESPIPE
- The file descriptor underlying stream is not
seekable (e.g., it refers to a pipe, FIFO, or socket).
fgetpos(),
fseek(),
fsetpos(),
ftell()
は、それぞれ
fflush(3),
fstat(2),
lseek(2),
malloc(3)
などのルーチンを呼び出す際に失敗する可能性がある。この場合は
それぞれ対応した
errno
が設定される。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
fseek(), ftell(), rewind(), fgetpos(),
fsetpos() |
Thread safety |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C89, C99.
lseek(2),
fseeko(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。