70 likes | 364 Views
ЛЕКЦИЯ № 10 РАБОТА С ФАЙЛАМИ В MS DOS (длинные имена)
E N D
ЛЕКЦИЯ № 10 РАБОТА С ФАЙЛАМИ В MS DOS (длинные имена) Рассмотрим отдельно средства среды MS DOS, предназначенные для работы с файловой системой, использующейся в операционной системе Windows. Установить тот факт, что система поддерживает длинные имена файлов, можно вызовом функции 71а0h прерывания 21h. Получить информацию о томе ВХОД: АХ=71а0h; DS:SI – ASCIZ – имя корневого каталога тома, о котором необходимо получить информацию (например, “C:\”); ES:DI – буфер для имени файловой системы; СХ= размер буфера, адрес которого задан в ES:DI (32 байта). ВЫХОД: CF=0 в случае успеха, следующие регистры установлены: ИХ= флаги файловой системы: 0 – при поиске учитывать регистр букв в именах файлов; 1 – сохранять регистр букв в элементах каталога; 2 – использование символов Unicode в именах файлови каталогов;
3 = 13 – резерв (0); 14 – поддержка DOS –функций для длинных имен файлов; 15 – сжатый том; СХ = максимальная длина файловых имен (обычно 255); DX= максимальная длина пути (обычно 260); ES:DI – в буфере по этому адресу ASCIZ – имя файловой системы. CF=1 в случае неудачи, при этом АХ= код ошибки или АХ=7100h если функция не поддерживается. Для работы с длинными именами файлов Windows предоставляет аналогичные традиционным функции, но имеющие другие номера. Новые номера состоят из четырех цифр: первые две 071h, последние – номер старой функции. Для некоторых функций существуют особенности в их работе. Так, функции поиска файлов – 714eh, 714fh прерывания 21h возвращают информацию о файлах через специальную структуру WIN32_FIND_DATA, адрес которой возвращается в качестве результата их работы. При работе с функциями, поддерживающими длинные имена файлов, используются еще две структуры: by_handle_file_information и filetime. Последняя структура содержит 64 – разрядное значение, которое определяет число 100 – наносекундных интервалов, прошедших с 12:00 утра 1 января 1901 года.
FILETIME struc DwLowDateTime dd ? ;младшме 32 бита значения времени DwHighDateTime dd ? ;старшие 32 бита значения времени Сравнительный перечень функций MS DOS (короткие и длинные имена) и аналогичных функций API WIN32
Создание или открытие файла ВХОД: АХ=716Сh; ВХ= режимы доступа и флаги: режимы доступа: 0000h – файл только для чтения; 0001h – файл только для записи; 0002h – файл для чтения и записи; 0003h – резерв;0004h – открыть файл для чтения без изменения даты последнего доступа; режимы разделения: 0000h – режим эмуляции – файл можно открывать любой программе любое число раз; 0010h – файл открыт в монопольном режиме доступа ; 0020h – файл открыт в монопольном режиме доступа по записи; 0030h – файл открыт в монопольном режиме доступа по чтению; 0040h –открыть файл, разрешая другим процессам доступ по чтению – записи, но с запретом режима эмуляции;
флаги: 0080h – дочерний процесс не наследует дескриптор файла, его при необходимости следует передавать явно; 0100h – не использовать буферизацию или кэширование средствами ОС, операции чтения-записи выполняются напрямую с диском в соответствии с текущим положением файлового указателя; 0200h – файл нельзя сжимать; 0400h – содержимое регистра DI следует использовать как порядковый номер в псевдониме файла; 2000h – не вызывать обработчик критической ошибки (int 24h), MS DOS вернет программе код ошибки; 4000h – после каждой операции записи MS DOS будет отправлять данные на диск без их кэширования; СХ= атрибуты создаваемого (и только) файла: 0000h – чтение – запись; 0001h – только чтение; 0002h – скрытый файл; 0004h – системный файл; 0008h – метка тома; 0020h – архивный файл; DX= действия, если файл существует или не существует, значения битов: 0010h – вернуть ошибку, если файл существует, иначе создать файл; 0001h – открыть файл, если он существует, иначе вернуть ошибку; 0002h – открыть файл без сохранения существующего, иначе вернуть ошибук (если файл не существует); DS:SI – ASCIZ – имя файла;
DI – порядковый номер, который добавляется к концу имени в псевдониме файла (для этого должен быть задан флаг 0400h в регистре ВХ). ВЫХОД: CF=0 успешное завершение: АХ= дескриптор файла, СХ= состояние: 1-файл открыт; 2- файл открыт без сохранения содержимого; CF=1: АХ= код ошибки. После того, как файл открыт или создан функцией 716сh , с ним можно работать, используя старые функции чтения-записи и позиционирования.