При прямом доступе можно выполнять операции ввода/вывода, используя систему ввода/вывода языка С и функцию 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);