Страница 21 из 41 Метод дескриптора файла: Для открытия файлов используйте функцию 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) таким образом, что первый будет относиться к тому же файлу и устройству, что и последний. |