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);
ОПИСАНИЕ
Функция
fseek
устанавливает позицию следующей операции ввода/вывода в потоке,
на который указывает аргумент
stream.
Новая позиция получается прибавлением смещения
offset
байтов к начальной позиции, определяемой параметром
whence.
Если
whence
определяется как
SEEK_SET,
SEEK_CUR
или
SEEK_END,
то смещение будет относиться к началу файла,
текущей позиции указателя или концу файла соответственно. Успешный вызов функции
fseek
"очищает" индикатор конца файла для потока и отменяет влияние функции
ungetc(3)
на этот же поток.
Функция
ftell
получает текущее значение позиции в файле для потока, на который указывает
stream.
Функция
rewind
устанавливает позицию в файле для потока, на который указывает
stream ,
равную началу файла. Эта функция эквивалентна вызову
(void)fseek(stream, 0L, SEEK_SET),
хотя в этом случае "очищается" также индикатор ошибок (см.
clearerr(3)).
Функции
fgetpos
и
fsetpos
равны по значению вызовам
ftell
и
fseek
(при этом значение положения (whence) установлено равным
SEEK_SET);
они сохраняют (или устанавливают) текущее значение смещения в файле
в объектах, определяемых
pos,илиберутэтизначенияизданныхобъектов.
В некоторых не-UNIX системах объект
fpos_t
может быть сложным объектом, а данные функции могут быть единственным
способом быстро менять позицию в текстовом потоке.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция
rewind
не возвращает значений. При успешном завершении вызова
fgetpos,
fseek,
fsetpos
возвращают 0,
а
ftell
возвращает значение текущего смещения. В противном случае возвращается -1,
а в глобальную переменную
errno
записывается соответствующий код ошибки.
НАЙДЕННЫЕ ОШИБКИ
EBADF
В указанном потоке
stream
невозможно изменять позицию ввода/вывода в файле.
EINVAL
Параметр
whence
в
fseek
не является
SEEK_SET,
SEEK_END
или
SEEK_CUR.
Фукнции
fgetpos,
fseek,
fsetpos
и
ftell
при ошибках устанавливают значение глобальной переменной
errno
равным значению, определенному в функциях
fflush(3),
fstat(2),
lseek(2)
и
malloc(3).
СООТВЕТСТВИЕ СТАНДАРТАМ
Функции
fgetpos,
fsetpos,
fseek,
ftell
и
rewind
соответствуют стандарту ANSI X3.159-1989 (``ANSI C'').