Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Позиционирование в потоке
Все вышеперечисленные средства обмена с файлами (посимвольный, построчный и форматный) позволяли записывать данные в файл и читать из него информацию только последовательно. При открытии файла в режимах “r” и “w” указатель текущей позиции чтения/записи устанавливается в начало потока, а в режиме “a” – в конец потока. При выполнении каждой операции ввода/вывода указатель текущей позиции в потоке перемещается на новую текущую позицию в соответствии с числом прочитанных (записанных) байтов. Существуют средства позиционирования в потоке, позволяющие перемещать указатель на нужный байт. Эти средства дают возможность работать с файлом на диске, как с обычным массивом, осуществляя доступ к содержимому файла в произвольном порядке.
int fseek (указатель на поток, смещение, начало отсчета) ;
смещениезадается переменной или выражением типа long и может быть отрицательным; начало отсчета задается одной из предопределенных констант, размещенных в заголовочном файле stdio.h: SEEK_SET (имеет значение 0) – начало файла; SEEK_CUR (имеет значение 1) – текущая позиция; SEEK_END (имеет значение 2) – конец файла. Константа типа long записывается в виде последовательности десятичных цифр, за которыми добавляется разделитель L или l. Например: 0l 0L 688L 34l Функция fseek ( ) возвращает 0, если перемещение в потоке выполнено успешно или не 0 в противном случае. Примеры использования данной функции: fseek (fp, 0L, SEEK_SET); - перемещение к началу потока; fseek (fp, 0L, SEEK_END) ; - перемещение к концу потока; При использовании сложных типов данных (структур) можно перемещаться в потоке на то количество байтов, которое занимает этот тип данных. Например: если определена структура struct str {…..} st ; Тогда при следующем обращении к функции fseek( ) указатель текущей позиции в потоке будет перемещен на одну структуру назад относительно текущей позиции: fseek (fp, -(long) sizeof(st), SEEK_CUR);
Дата добавления: 2015-06-30; просмотров: 193; Нарушение авторских прав Мы поможем в написании ваших работ! |