Позиционирование в файле
Каждый открытый файл, как уже отмечалось, имеет скрытый указатель на текущую позицию в нем. При открытии файла этот указатель устанавливается на начало данных, и все операции в файле будут производиться с данными, начинающимися в этой позиции.
При каждом выполнении функции чтения или записи указатель смещается на количество прочитанных или записанных байт, т.е. устанавливается после прочитанного или записанного блока данных в файле – это последовательный доступ к данным.
В языке Си/С++ можно установить указатель на некоторую заданную позицию в файле. Для этого используют стандартную функцию fseek, которая позволяет выполнить чтение или запись данных в произвольном порядке.
Декларация функции позиционирования следующая:
int fseek(FILE *f, long size, int code);
Значение параметра size задает количество байт, на которое необходимо сместить указатель в файле f, в направлении параметра code, который может принимать следующие значения:
– смещение от начала файла – | (SEEK_SET); | |
– смещение от текущей позиции – | (SEEK_CUR); | |
– смещение от конца файла – | (SEEK_END). |
Таким образом, смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла.
В случае успеха функция возвращает нулевое значение, а в случае ошибки (например, попытка выхода за пределы файла) – единицу.
Доступ к файлу с использованием функции позиционирования (fseek) называют произвольным доступом.
Иногда нужно определить текущее положение в файле. Для этого используют функцию со следующей декларацией:
long ftell(FILE *f);
которая возвращает значение указателя на текущую позицию в файле или –1 в случае ошибки.
Дата добавления: 2014-12-30; просмотров: 1001;