Системное программное обеспечение персональных ЭВМ


Пример 11



Пример 11

struct Ext_FCB { byte flag; /* Признак. Его значение 0xFF говорит о том, что представлен расширенный FCB */ char reserved2[5]; byte attr; /* Атрибуты файла в каталоге */ struct FCB fcb; /* Стандартный FCB */ };

На первый взгляд может показаться, что обрабатываемый файл должен состоять из записей фиксированной длины, но на самом деле это не так. Поле recsize после открытия файла имеет значение 128, но оно доступно программисту и может быть изменено в любой момент, что позволяет работать с записями переменной, в том числе и динамически изменяющейся длины.

Метод FCB использует так называемую Дисковую Передаточную Область (DTA - Disk Transfer Area). При загрузке программы эта область выделяется программе системой, но программист может организовать собственную DTA и сообщить системе ее адрес. Весь обмен с дисками ведется только через DTA - назначенную системой или установленную программистом. Это, однако, не требует обязательной пересылки данных между DTA и рабочими областями программы, так как программист может в любой момент переназначить адрес DTA на свою рабочую область.

10.4.2. Функции ввода-вывода

Оба метода предоставляют программисту полный набор функций DOS для ввода-вывода. Поскольку эти средства подробно описаны в справочной литературе, мы здесь ограничимся далеко не исчерпывающим их обзором.

При использовании метода дескрипторов адрес ASCIIZ-строки, содержащей полный путь и имя файла, передается функциям DOS, выполняющим создание/открытие файла, в регистрах DS:DX, а в AL - код режима разделения. Эти функции возвращают дескриптор открытого файла в регистре AX. Тем функциям, которые работают с уже открытым файлом, файловый дескриптор передается в регистре BX. Для функций, выполняющих обмен с диском, адрес буфера в памяти задается в DS:DX, а в CX - счетчик байт для обмена, эти функции возвращают в AX число действительно переданных байт. Для всех функций флаг CY служит индикатором ошибки, если он взведен, то AX содержит код ошибки. В операциях чтения/записи обмен начинается с того байта файла, на который указывает текущее значение указателя чтения/записи (при открытии файла это значение устанавливается в 0), после каждой операции значение указателя увеличивается на число прочитанных/записанных байт.



- Начало -  - Назад -  - Вперед -