Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_po_si.doc
Скачиваний:
12
Добавлен:
12.11.2018
Размер:
11.78 Mб
Скачать

7.2.3. Произвольный доступ к файлу

В приведенных выше программах с функциями ввода-вывода низкого уровня обмен с файлом осуществлялся последовательно. При необходимости файл можно читать на низком уровне и в произвольном порядке. Так же как это делалось при работе с потоками, можно изменять значение указателя текущей позиции чтения/записи в файле. Для этой цели служит функция lseek( ). Прототип этой функции имеет следующий вид:

Функция lseek( ) изменяет текущую позицию в файле, связанном с дескриптором fd, на новую, определяемую смещением (второй параметр - offset) относительно выбранной точки отсчета (третий параметр - origin).

Точка отсчета задается одной из предопределенных констант, размещенных в заголовочном файле io.h (MS-DOS) или файле unistd.h (UNIX):

SEEK_SET (имеет значение 0) - начало файла;

SEEK_CUR (имеет значение 1)-текущая позиция;

SEEK_END (имеет значение 2) - конец файла.

При удачном завершении функция lseek( ) возвращает новую текущую позицию чтения/записи, представляющую собой смещение от начала файла. Попытка переместиться за пределы файла считается ошибкой. Код ошибки заносится в глобальную переменную еrrnо, определенную в заголовочном файле errno.h.

Для определения текущей позиции в файле можно использовать функцию tell( ), прототип которой имеет следующий вид:

Приведем примеры использования функции lseek( ).

Пример 1.

Установка текущей позиции в файле на его начало:

Пример 2.

Установка текущей позиции для последующего добавления данных в файл (позиция в конце файла):

Пример 3.

Модификация записей в существующем файле

В качестве еще одного примера использования функции lseek( ) приведем фрагмент программы, производящей модификацию записей в существующем файле. Запись - это объект (последовательность байтов) в файле, являющаяся сложным структурным элементом в контексте программы, обрабатывающей эти записи. Логическая структура записи может быть любой: некоторой последовательностью байтов, строкой, структурой и т.д. В следующем фрагменте программы предполагается, что все записи имеют одинаковый размер (в байтах) и размещены в файле подряд.

Буфер buff может быть определен как массив символов, достаточный для размещения одной записи.

Графика

Теоретические положения Управление экраном в текстовом режиме в ms dos

Система Borland C++ обладает богатой библиотекой функций. Для хорошего оформления диалога пользователя с компьютером (программой) необходима развитая система функций управления работой экрана. Borland C++ предоставляет пользователю такую возможность. Пакет функций управления экраном делится на две части в соответствии с возможностями компьютера. Первая – работа в текстовом режиме (text mode), вторая – работа в графическом режиме (grafics mode). Функции управления экраном не являются уникальным для Borland C++, они такие же, как в системах Turbo C++ и некоторых других. Далее будет сделан обзор основных особенностей этих функций. Библиотека функций для работы с текстовым экраном, с заголовочным файлом CONIO.H и библиотека работы с графическим экраном с заголовочным файлом GRAFICS.H не входят в стандарт языка С. Они существенно используют особенно операционной системы MS DOS, архитектуру IBM PC и графику BGI (Borland Grafics Interfase).