[Справочник С/C++] - fseek
fseek
--------------------------------------------------------------------------------
Функция Устанавливает указатель файла в потоке.
Синтаксис #include <stdio.h>
int fseek(FILE * stream, long offset,
int fromwhere);
Файл, содержащий stdio.h
прототип
Описание Функция fseek устанавливает адресный указатель
файла, соответствующий потоку stream, в новую
позицию, которая расположена по смещению offset
относительно места в файле, определяемого
параметром fromwhere.
Параметр fromwhere может иметь одно из трех
значений 0, 1 или 2, которые представлены тремя
символическими константами (определенными в файле
stdio.h), следующим образом:
--------------------------------------------------
Параметр Размещение в файле
fromwhere
--------------------------------------------------
SEEK_SET (0) начало файла;
SEEK_CUR (1) позиция текущего указателя
файла;
SEEK_END (2) конец файла (EOF);
--------------------------------------------------
Функция fseek сбрасывает любой символ, записанный с
помощью функции ungetc.
Функция fseek используется с операциями
ввода/вывода в поток. При работе с дескриптором
файла пользуйтесь функцией lseek.
После этой операции можно производить как ввод, так
и вывод в поток.
Возвращаемое Функция fseek возвращает значение 0, если
значение указатель файла успешно перемещен, и ненулевое
значение в случае неудачного завершения.
Примечание. Функция fseek может вернуть нулевое
значение даже в случае, если этого не было. Это
происходит в результате того, что DOS, которая и
перемещает указатель, не проверяет его установку.
fseek возвращает индикатор ошибки только в случае,
если устройство или файл не открыты.
Переносимость Данная функция поддерживаются на системах UNIX
и стандартом ANSI C.
Смотрите также fgetpos, fopen, fsetpos, ftell, lseek, rewind,
setbuf, tell.
Пример:
#include <stdio.h>
int main(void)
{
FILE *stream;
stream = fopen("MYFILE.TXT", "r");
print("filesize of MYFILE.TXT is %ld bytes\n",
filesize(stream));
}
long filesize(FILE *stream);
{
long curpos,length;
/* сохранить текущее положение указателя */
curpos = ftell(stream);
/* перейти в конец файла */
fseek(stream, 0L, SEEK_END);
/* получить текущее положение указателя */
length = ftell(stream);
/* восстановить старое положение */
fseek(stream, curpos, SEEK_SET);
return(length);
}