6.5 Ввод/вывод при прямом доступе: функция fseek()
При
прямом доступе можно выполнять операции
ввода/вывода, используя систему
ввода/вывода языка С
и функцию fseek(),
которая устанавливает указатель текущей
позиции в файле (или перемещает указатель
записи/чтения по файлу). Прототип этой
функции следующий:
int
fseek ( FILE *уф, long
int
колич_байт, int
начало_отсчета);
Здесь
уф
– это указатель файла, возвращаемый в
результате вызова функции fopen(),
колич_байт
– количество байтов, на которое смещается
указатель
записи/чтения файла
(или курсор
файла),
считая от начала_отсчета,
где начало отсчёта – это одна из следующих
констант:
Начало
файла – SEEK_SET
Текущая
позиция – SEEK_CUR
Конец
файла – SEEK_END
При
успешном завершении своей работы функция
fseek()
возвращает нуль, а в случае ошибки –
ненулевое значение.
Иными
словами, параметры этой функции следующие:
файловая
переменная,
размер
смещения (в байтах)
и начало
отсчёта.
Так,
например, курсор установлен в начало
файла, где хранится одномерный
целочисленный массив. Необходимо
сместить его на элемент с номером Num.
Это можно сделать следующим образом.
Для вычисления размера смещения нужно
размер одного элемента sizeof(int)
умножить на количество предшествующих
элементов массива (Num
- 1):
fseek
( fp, sizeof(int)
* (Num - 1), SEEK_SET );