Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Открытие/закрытие файла. Часть 3

ОГЛАВЛЕНИЕ

Метод дескриптора файла:

   Для  открытия  файлов используйте функцию 3DH прерывания  21H.
DS:DX должны указывать на строку,  дающую путь и имя файла, вклю-
чая имя нкакопителя, если это необходимо.  Вся строка должна быть
не длиннее 63-х байтов и завершаться символом ASCII 0.  В AL надо
поместить  код доступа, причем 0 открывает файл для  чтения, 1  -
для записи, а 2 - для чтения/записи. При возврате AX будет содер-
жать 16-битный номер файла, по которому файл впоследствии иденти-
фицируется. Файловый указатель  устанавливается  на начало файла.
Размер записи устанавливается равным 1 байту - это связано с тем,
что операции прямого доступа при использовании метода дескриптора
файла не имеют специальных буферов: на самом деле файлы с  прямым
доступом рассматриваются как  последовательные  и с ними работают
одни  и те же функции.  Эта функция позволяет открывать как обыч-
ные, так и спрятанные файлы.  При возврате флаг переноса равен 0,
если файл открыт успешно.  В противном случае флаг переноса уста-
навливается, а AX содержит 2  -  если  файл  не  найден, 4 - если
программа  хочет открыть слишком много файлов, 6 - при ошибке  на
диске и 12 - если неправильно  указан  код доступа в AL. Вот при-
мер:

;---в сегменте данных
PATH    DB    'A:LEVEL1\FILENAME.EXT',0

;---открываем файл для чтения/записи
   MOV  AH,3DH         ;номер функции
   MOV  AL,2           ;открываем для чтения/записи
   LEA  DX,PATH        ;DS:DX указывают на путь
   INT  21H            ;открываем файл
   JC   OPEN_ERROR     ;уход на обработку ошибок
   MOV  HANDLE,AX      ;сохраняем номер файла

   Функция  3EH  прерывания 21H закрывает файл, открытый  методом
дескриптора файла.  Надо просто  поместить номер файла в BX и вы-
полнить функцию.  При возврате флаг переноса равен 0, если все  в
порядке, иначе он равен 1, а AX  =  6, если указан неверный номер
файла.

;---закрытие файла
   MOV  AH,3EH       ;номер функции
   MOV  BX,HANDLE    ;номер файла
   INT  21H          ;закрываем файл
   JC   CLOSE_ERROR  ;уход на обработку ошибки

   Функция 45H прерывания 21H создает второй дескриптор файла  из
существующего  открытого  дескриптора.   В  BX должен быть указан
существующий  номер, а в AX будет возвращен новый.   Функция  46H
прерывания 21H связывает  второй  дескриптор  (помещаемый в CX) с
открытым  файлом (номер которого в BX) таким образом, что  первый
будет относиться к тому же файлу и устройству, что и последний.