Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Позиционирование в потоке

Все вышеперечисленные средства обмена с файлами (посимвольный, построчный и форматный) позволяли записывать данные в файл и читать из него информацию только последовательно.

При открытии файла в режимах “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; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.