Dos fn 3dh открыть описатель файла

Содержание

MS-DOS для программиста

3.4. Работа с файлами

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

Создание файлов

Для создания файла предназначена функция 3Ch прерывания INT 21h. С помощью этой функции может быть создан файл как в текущем, так и в любом другом каталоге. Если файл с указанным именем уже существует, он обрезается до нулевой длины. Будьте осторожны при использовании этой функции — она может уничтожить файл.

Дополнительно функция 3Ch выполняет операцию открытия только что созданного файла, возвращая программе идентификатор файла. При создании файла программа может указать атрибуты файла.

Приведем параметры вызова функции создания файла:

На входе: AH 3Ch
CX Атрибуты создаваемого файла:
00h — обычный файл;
01h — только читаемый файл;
02h — скрытый файл;
04h — системный файл
DS:DX Адрес строки, содержащей путь к файлу
На выходе: AX Код ошибки, если был установлен флаг переноса CF;
Идентификатор файла, если флаг переноса CF сброшен

При выполнении этой функции возможно возникновение следующих ошибок:

  • отсутствует какой-либо элемент в пути для создаваемого файла, например, диск или каталог;
  • была сделана попытка создать файл в корневом каталоге, но корневой каталог переполнен;
  • в указанном каталоге уже есть файл с таким именем, и этот файл имеет атрибут «Только читаемый»;
  • пользователь, который работает в сети, не имеет прав доступа для выполнения указанной операции.

Операционная система игнорирует попытки создания с помощью этой функции каталога или метки диска.

Для того чтобы при создании файла случайно не уничтожить содержимое уже существующего файла с таким же именем, программа может использовать функцию 5Bh. Эта функция проверяет заданный путь на предмет наличия указанного файла. Если такой файл уже существует, функция возвращает программе признак ошибки:

На входе: AH 5Bh
CX Атрибуты создаваемого файла:
00h — обычный файл;
01h — только читаемый файл;
02h — скрытый файл;
04h — системный файл
DS:DX Адрес строки, содержащей путь к файлу
На выходе: AX Код ошибки, если был установлен флаг переноса CF;
Идентификатор файла, если флаг переноса CF сброшен

Если вам требуется временный файл, вы можете создать его с помощью функции 5Ah:

На входе: AH 5Ah
CX Атрибуты создаваемого файла:
00h — обычный файл;
01h — только читаемый файл;
02h — скрытый файл;
04h — системный файл
DS:DX Адрес блока памяти, в который функция запишет путь созданного временного файла. Размер этого блока памяти должен быть по крайней мере 13 байт
На выходе: AX Код ошибки, если был установлен флаг переноса CF;
Идентификатор файла, если флаг переноса CF сброшен

Операционная система не будет автоматически удалять созданный временный файл после завершения работы программы или перезагрузки. Программа должна сама удалить этот файл.

Открытие файла

Перед тем, как начать работу с файлом, его нужно открыть. Функции, создающие новые файлы, открывают их автоматически. Для того, чтобы открыть существующий файл, вы можете воспользоваться функцией 3Dh:

На входе: AH 3Dh
AL Требуемый режим доступа:

Бит 7: флаг наследования

0 — идентификатор файла наследуется порожденным процессом
1 — идентификатор файла не наследуется порожденным процессом

Биты 4. 6: режим разделения

000 — режим совместимости
001 — запрещение всех видов доступа
010 — запрещение записи
011 — запрещение чтения
100 — разрешение всех видов доступа

Бит 3:0 — зарезервировано

Биты 0. 2: вид доступа

000 — чтение
001 — запись
010 — чтение и запись

DS:DX Адрес строки, содержащей путь к файлу
На выходе: AX Код ошибки, если установлен флаг переноса CF;
Идентификатор файла, если флаг переноса CF сброшен

С помощью функции 3Dh можно открыть любой файл (но не каталог). Если требуется вид доступа «запись», открываемый файл не должен иметь атрибут «Только читаемый».

Для использования битов 4. 7 (управляющих доступом к файлу другими программами в сети) должна быть запущена программа share.exe .

Если используется бит наследования, то порожденному процессу наследуются вид доступа, запрошенный при открытии файла.

Функция 6Ch обладает расширенными возможностями по созданию и открытию файлов:

На входе: AH 6Ch
AL 00h
BX Байт флагов расширенного режима открытия файла
CX Атрибуты создаваемого файла, используется только при создании файлов
DX Выполняемая функция, если файл существует или не существует:

Биты 0-3 регистра DX задают действие, если файл существует:

0000h — если файл существует, вернуть признак ошибки;
0001h — если файл существует, открыть его;
0002h — если файл существует, заместить и открыть его.

Биты 4-7 регистра DX задают действие, если файл не существует:

0000h — если файл не существует, вернуть признак ошибки;
0001h — если файл не существует, создать и открыть его

DS:SI Адрес строки, содержащей путь к файлу
На выходе: AX Код ошибки, если флаг переноса CF установлен;
Идентификатор файла, если флаг переноса CF сброшен
CX Код выполненных действий:
0 — файл был открыт;
1 — файл был создан и открыт;
2 — файл был замещен и открыт

Регистр BX на входе задает флаги расширенного режима открытия файла в следующем формате:

Биты Назначение
0. 2 Режим доступа при чтении или записи
3 Зарезервировано, должно быть равно 0
4. 6 Режим разделения
7 Флаг наследования
8. 12 Зарезервировано, должно быть равно 0
13 0 — Режим обычного использования обработчика критических ошибок INT 24h (обработчик критических ошибок будет описан позже)
1 — Блокировка обработчика критических ошибок INT 24h. Для того, чтобы узнать причину ошибки, программа должна использовать функцию 59h прерывания INT 21h
14 Управление буферизацией:
0 — Использование стандартной для MS-DOS буферизации;
1 — Отмена буферизации. Использование этого режима замедлит работу с диском, однако вероятность потери информации при аварии в питающей сети уменьшится

Описанная выше функция является как бы комбинацией функций 3Dh и 3Ch (открытие и создание файла). Она удобна, но при ее использовании программа должна убедиться в том, что версия MS-DOS не ниже, чем 4.0.

Удаление файла

Удалить файл можно при помощи функции 41h прерывания INT 21h :

На входе: AH 41h
DS:DX Адрес строки в формате ASCIIZ, содержащей путь удаляемого файла
На выходе: AL Код ошибки, если установлен флаг переноса CF

С помощью этой функции нельзя удалить файл, имеющий атрибут «Только читаемый».

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

Переименование или перемещение файла

Программа может изменить имя файла или переместить его в другой каталог того же самого диска, воспользовавшись функцией 56h прерывания INT 21h :

На входе: AH 56h
DS:DX Адрес строки в формате ASCIIZ, содержащей старое имя
ES:DI Адрес строки в формате ASCIIZ, содержащей новое имя или новый путь к файлу
На выходе: AL Код ошибки, если установлен флаг переноса CF

С помощью этой функции можно переименовать (но не переместить) не только файл, но и каталог.

Функции библиотеки Borland C++

Стандартная библиотека Borland C++ содержит функции для работы с файлами. Эти функции можно разделить на две группы — функции низкого уровня и функции ввода/вывода потоком. Вторая группа функций использует буферизацию и будет рассмотрена в разделе, посвященном буферизованному вводу/выводу.

Функции низкого уровня отображаются на описанные выше функции прерывания INT 21h (а также на функции этого же прерывания, предназначенные для чтения или записи, позиционирования и т. д.).

creat

Для создания файла можно использовать функцию creat :

Эта функция и ее параметры описаны в файлах io.h, sys\types.h, sys\stat.h, errno.h.

Первый параметр определяет путь создаваемого файла и его имя. Если файл с указанным именем существует, и не имеет атрибут «Только читаемый», функция сбрасывает длину файла до нуля. Содержимое файла при этом уничтожается.

Второй параметр позволяет задать атрибуты создаваемого файла. Он может иметь следующие значения:

Параметр Операции, разрешенные для создаваемого файла
S_IWRITE Запись
S_IREAD Чтение
S_IREAD | S_IWRITE Чтение и запись

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

После создания файла функция creat открывает новый файл, возвращая идентификатор файла или код ошибки.

Мощная функция open предназначена как для открытия существующих файлов, так и для создания новых:

Первый и третий параметры этой функции аналогичны параметрам функции creat , причем третий параметр нужен только при создании нового файла. Квадратные скобки указывают на то, что этот параметр можно не указывать.

Параметр oflag может являться результатом логической операции ИЛИ над следующими константами, определенными в файле fcntl.h:

Константа Описание
O_APPEND При записи в файл информация будет добавляться в конец файла
O_BINARY Файл открывается для работы в двоичном режиме (игнорируются управляющие символы, такие как конец строки)
O_CREAT Создается новый файл и открывается для записи. Эта константа игнорируется, если указанный в первом параметре файл уже существует
O_EXCL Используется вместе с O_CREAT . Если указанный в первом параметре файл существует, функция возвратит признак ошибки
O_RDONLY Файл открывается только для чтения, попытка записи в файл приведет к тому, что функция записи вернет признак ошибки
O_RDWR Файл открывается как для чтения, так и для записи
O_TEXT Файл открывается в текстовом режиме
O_TRUNC Существующий файл открывается и обрезается до нулевой длины (если для этого файла разрешена операция записи)
O_WRONLY Файл открывается только для записи (в MS-DOS для файла, открытого с признаком O_WRONLY , разрешено выполнение операции чтения)

close

Для того, чтобы закрыть файл, открытый функциями creat или open , нужно использовать функцию close :

В качестве параметра функции передается идентификатор файла, полученный при открытии или создании файла. Функция возвращает 0 при успешном закрытии файла или -1 при ошибке.

Коды ошибок

Код ошибки для этой и других функций стандартной библиотеки Borland C++ записывается в глобальную переменную errno.

Fn 00H: завершить программу

Вход

  • AH = 00H
  • CS = сегмент PSP завершающегося процесса

Выход

Описание:

передает управление на вектор завершения в PSP (выходит в родительский процесс). Идентична функции INT 20H Terminate. регистр CS должен указывать на PSP. восстанавливает векторы прерываний DOS 22H-24H (завершение, Ctrl-Break и Критическая ошибка), устанавливая значения, сохраненные в родительском PSP. выполняет сброс файловых буферов. файлы должны быть предварительно закрыты, если их длина изменилась.

Замечание:

Проще и более аккуратно — использовать функцию DOS Fn 4cH Exit.

Fn 01H: ввод с клавиатуры

Вход

Выход

  • AL = символ, полученный из стандартного ввода

Описание:

Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо). при распознавании Ctrl-Break выполняется INT 23H.

Замечание:

ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и т.п.) требует двух обращений к этой функции. первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.

Fn 09H: Выдать строку на дисплей

Вход

  • AH = 09H
  • DS:DX = адрес строки, заканчивающейся символом ‘$’ (ASCII 24H)

Выход

Описание:

строка, исключая завершающий ее символ ‘$’, посылается на стандартный вывод. символы Backspace обрабатываются как в функции 02H Display Char. обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13H и ASCII 0aH). строки, содержащие ‘$’, можно выдать через 40H Write Handle (BX=0).

Fn 06H: Консольный ввод-вывод

Вход

  • AH = 06H
  • DL = символ (от 0 до 0feH), посылаемый на стандартный вывод
  • = 0ffH запрос ввода со стандартного ввода

Выход

  • ZF = Сброшен (NZ), если символ готов ҐҐЈҐ при запросе ввода

Описание:

при DL = 0ffH выполняет ввод с консоли «без ожидания», возвращая взведенный флаг нуля (ZF), если на консоли нет готового символа. если символ готов, сбрасывает флаг ZF (NZ) и возвращает считанный символ в AL. если DL не равен 0ffH, то DL направляется на стандартный вывод.

Замечание:

Не проверяет Ctrl-Break. вызывайте дважды для расширенного ASCII.

Fn 0aH: ввод строки в буфер

Вход

  • AH = 0aH
  • DS:DX = адрес входного буфера (смотри ниже)

Выход

  • нет = буфер содержит ввод, заканчивающийся символом CR (ASCII 0dH)

Описание:

при входе буфер по адресу DS:DX должен быть оформлен так:

¦max¦ ? ¦ ? ? ? ? ? MAX — максимально допустимая

при выходе буфер заполнен данными следующим образом:

¦max¦len¦ T E X T 0dH LEN — действительная длина данных

символы считываются со стандартного ввода вплоть до CR (ASCII 0dH) или до достижения длины MAX-1. если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter).

Второй байт буфера заполняется действительной длиной введенной строки, не считая завершающего CR. последний символ в буфере — всегда CR (который не засчитан в байте длины). символы в буфере (включая LEN) в момент вызова используются как «шаблон». В процессе ввода действительны обычные клавиши редакти рования: Esc выдает «\» и начинает с начала, F3 выдает буфер до конца шаблона, F5 выдает «@» и сохраняет текущую строку как шаблон, и т.д. большинство расширенных кодов ASCII игнорируются. при распознавании Ctrl-Break выполняется прерывание INT 23H (буфер остается неизменным).

Fn 25H: установить вектор прерывания

Вход

  • AH = 25H
  • AL = номер прерывания
  • DS:DX = вектор прерывания: адрес программы обработки прерывания

Выход

Описание:

устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL равным DS:DX. это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS здесь знает, что вы делаете, и гарантирует, что в момент записи прерывания будут заблокированы.

Предупреждение:

Не забудьте восстановить DS (если необходимо) после этого вызова.

Fn 35H: дать вектор прерывания

Вход

  • AH = 35H
  • AL = номер прерывания (00H до 0ffH)

Выход

  • ES:BX = адрес обработчика прерывания

Описание:

возвращает значение вектора прерывания для INT (AL); то есть, загружает в BX 0000:[AL*4], а в ES — 0000:[(AL*4)+2].

Предупреждение:

Эта функция изменяет сегментный регистр ES.

Fn 27H: читать произвольный блок файла

Вход

  • AH = 27H
  • DS:DX = адрес открытого FCB
  • CX = число считываемых записей

Выход

  • AL = 0 если чтение успешно и DTA заполнена данными
  • AL = 1 если достигнут конец файла (EOF) и данные не считаны
  • AL = 2 если DTA + FCB (RecSize * CX) выходит за границу сегмента
  • AL = 3 если EOF и считана усеченная порция (дополнена нулями)
  • CX = действительное число считанных записей

Описание:

Читает несколько записей из файла, начиная с файлового адреса, специфицированного полем RandomRec в FCB. Помещает данные в память, начиная с адреса DTA. число считанных байт = FCB RecSize*CX. Поля RandomRec, CurBlk и CurRec корректируются, чтобы указывать на следующую запись (первую запись за прочитанными).

Fn 31H: завершиться и остаться резидентным — KEEP

Вход

  • AH = 31H
  • AL = код выхода
  • DX = объем памяти, оставляемой резидентной, в параграфах

Выход

Описание:

выходит в родительский процесс, сохраняя код выхода в AL. код выхода можно получить через функцию 4dH Wait. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт = DX * 16). Эта функция перекрывает функцию INT 27H, которая не возвращает код выхода и неспособна установить резидентную программу, большую 64K.

Создаем вирус и антивирус (37 стр.)

Версии: DOS 2.00 и выше. Таблица Б-7. Формат блока данных страны

DOS, функция 39h Создать новое оглавление

DS:DX – адрес строки ASCIZ с именем оглавления

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Таблица Б-8. Коды некоторых стран

Если диск и/или корневой путь не указаны, то новое оглавление создается в текущей директории. Поддиректория создается и связывается с существующим деревом. Если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не создается.

Версии: DOS 2.00 и выше. DOS, функция 3Ah Удалить оглавление

DS:DX – адрес строки ASCIZ с именем оглавления

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или корневой путь не указаны, принимаются значения по умолчанию. Поддиректория удаляется из структуры оглавлений. Если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не удаляется.

Примечание. Оглавление не должно содержать файлов и поддиректорий, оно не должно попадать под влияние возможных ограничений DOS (например, не должно быть задействовано в активных командах JOIN или SUBST).

Версии: DOS 2.00 и выше. DOS, функция 3Bh Установить текущую директорию

DS:DX – адрес строки ASCIZ с именем оглавления

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или корневой путь не указаны, принимаются значения по умолчанию. Указанная поддиректория становится текущим оглавлением DOS для этого (или текущего) диска. Если флаг CF установлен при возврате, то AX содержит код ошибки, и текущее оглавление для выбранного диска не изменяется.

Версии: DOS 2.00 и выше. DOS, функция 3Ch Создать файл через описатель

DS:DX – адрес строки ASCIZ с именем файла

CX – атрибут файла (атрибуты приведены в описании функции DOS 43h)

CF=0, если функция выполнена успешно

AX – описатель файла

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или путь не указаны, принимаются значения по умолчанию.

Версии: DOS 2.00 и выше. DOS, функция 3Dh Открыть описатель файла

DS:DX – адрес строки ASCIZ с именем файла

AL – режим открытия:

AL=00h, чтобы открыть для чтения

AL=01h, чтобы открыть для записи

AL=02h, чтобы открыть для чтения и записи

CF=0, если функция выполнена успешно

AX – описатель файла

CF=1, если при выполнении функции возникли ошибки

Описание. Файл открывается в выбранном режиме доступа (режиме открытия). Если диск и/или путь не указаны, принимаются указанные по умолчанию. Файл должен существовать. Указатель чтения/записи устанавливается в ноль.

Версии: DOS 2.00 и выше. DOS, функция 3Eh Закрыть описатель файла

BX – описатель файла

CF=0, если функция выполнилась успешно

CF=1, если при выполнении функции возникли ошибки

Описание. BX содержит описатель файла (handle), возвращенный при открытии. Файл, представленный этим описателем, закрывается, его буферы сбрасываются и оглавление обновляется корректными размером, временем и датой. Из-за недостатка описателей файлов (максимум 20, по умолчанию установлено 8), возможно, придется закрыть часть текущих описателей, как, например, описатель 3 (стандартный AUX).

Версии: DOS 2.00 и выше. DOS, функция 3Fh Читать файл через описатель

BX – описатель файла

DS:DX – адрес буфера для чтения данных

CX – число считываемых байт

CF=0, если функция выполнена успешно

AX – число действительно прочитанных байт

CF=1, если при выполнении функции возникли ошибки

Описание. CX байт данных считываются из файла или устройства с описателем, указанным в BX. Данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX. Если необходимо установить позицию чтения/записи, можно использовать функцию 42h. Эта функция обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям чтения или записи.

Версии: DOS 2.00 и выше. DOS, функция 40h Писать в файл через описатель

BX – описатель файла

DS:DX – адрес буфера, содержащего записываемые данные

CX – число записываемых байт

CF=0, если функция выполнена успешно

AX – число действительно записанных байт

CF=1, если при выполнении функции возникли ошибки

Описание. CX байт данных записываются в файл или на устройство с описателем, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX, и записываются, начиная с текущей позиции указателя чтения/записи файла. Чтобы установить указатель файла, если необходимо, можно использовать функцию 42h. Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям чтения или записи.

Версии: DOS 2.00 и выше. DOS, функция 41h Удалить файл

DS:DX – адрес строки ASCIZ с именем файла

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Файл удаляется из оглавления заданного диска. Если диск и/или путь не указаны, принимаются значения по умолчанию. Имя файла не может содержать обобщенные символы («?» и «*»). Если файл имеет атрибут «только чтение», то перед удалением необходимо изменить этот атрибут через функцию 43h.

Версии: DOS 2.00 и выше. DOS, функция 42h Переместить указатель файла

BX – описатель файла

CX:DX на сколько передвинуть указатель: (CX*65536)+DX

AL=00h переместить относительно начала файла +CX:DX

AL=01h переместить относительно текущей позиции +CX:DX

AL=02h переместить относительно конца файла +CX:DX

CF=0, если функция выполнена успешно

DX:AX новая позиция указателя файла (если нет ошибки)

CF=1, если при выполнении функции возникли ошибки

Описание. Перемещает логический указатель чтения/записи к нужной позиции. Очередная операция чтения или записи начнется с этого адреса.

Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX.

Действительная длина файла равна (DX*65536)+AX.

Версии: DOS 2.00 и выше. DOS, функция 43h Установить/опросить атрибуты файла

DS:DX – адрес строки ASCIZ с именем файла

AL=00h – извлечь текущий атрибут файла

AL=01h – установить атрибут файла

CX – новый атрибут файла (для подфункции 01h)(Таблица Б-9)

CF=0, если функция выполнена успешно

CX – текущий атрибут файла (для подфункции 00h)(Таблица Б-9)

CF=1, если при выполнении функции возникли ошибки

Таблица Б-9. Атрибуты файла

Атрибут файла читается или устанавливается, согласно коду в AL. Если диск и/или путь не указаны, принимаются значения по умолчанию.

Примечание. Чтобы скрыть оглавление, нужно использовать CX=02h (а не 12h, как можно было ожидать).

Версии: DOS 2.00 и выше. DOS, функция 44h Управление устройством ввода/вывода

AL – код подфункции:

AL=00h – получить информацию об устройстве

AL=01h – установить информацию об устройстве

Расширение .3dh

1 расширения(ы) и 0 псевдоним(ы) в нашей базе данных

Ниже вы можете найти ответы на следующие вопросы:

  • Что такое .3dh файл?
  • Какая программа может создать .3dh файл?
  • Где можно найти описание .3dh формат?
  • Что может конвертировать .3dh файлы в другой формат?
  • Какие MIME-тип связан с .3dh расширение?

SeisWorks Horizontal Time-slice Format File

Другие типы файлов могут также использовать .3dh расширение файла. Если у вас есть полезная информация о .3dh расширение, написать нам!

Возможно ли, что расширение файла с ошибками?

Мы нашли следующие похожие расширения в нашей базе:

.3dh Расширение файла часто дается неправильно!

Согласно поисках на нашем сайте, эти опечатки были наиболее распространенными в прошлом году:

Не удается открыть .3dh файл?

Если вы хотите открыть .3dh файл на вашем компьютере, вам просто необходимо иметь соответствующие программы установлены. Если 3dh Ассоциации установлены неправильно, вы можете получить следующее сообщение об ошибке:

Не удалось открыть этот файл:

Чтобы открыть этот файл, Windows необходимо знать, какую программу вы хотите использовать, чтобы открыть его. Окна могут выходить в интернет, чтобы искать его автоматически, или вы можете вручную выбрать из списка программ, установленных на вашем компьютере.

Чтобы изменить ассоциации файлов:

  • Щелкните правой кнопкой мыши файл с расширением чье сотрудничество вы хотите изменить, а затем нажмите Открыть с.
  • В Открыть с помощью диалоговое окно, выберите программу ти котором вы хотите, чтобы открыть файл, или нажмите Обзор, чтобы найти программу, которую вы хотите.
  • Выберите Всегда использовать выбранную программу, чтобы открыть такой файл флажок.

Поддерживаемые операционные системы

Windows Server 2003/2008/2012/2020, Windows 7, Windows 8, Windows 10, Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, iOS, Android

Что такое расширение файла 3DH?

Резюме файла 3DH

У нас есть два существующие программные обеспечения, связанные с файлами 3DH (как правило это программное обеспечение от Unknown Developer, известное как Unknown Software), и их можно отнести к категории основных типов файлов два. Традиционно эти файлы имеют формат 3D Highway Base Map . Чаще всего файлы 3DH классифицируют, как 3D Image Files. Другие типы файлов могут относиться к Data Files.

Файлы с расширением 3DH были идентифицированы на настольных компьютерах (и некоторых мобильных устройствах). Они полностью или частично поддерживаются Windows, Linux и Unix. Рейтинг популярности основного типа файла 3DH составляет «Низкий», что означает, что эти файлы встречаются на стандартных настольных комьютерах или мобильных устройствах достаточно редко.

Если вы хотите узнать больше о файлах 3DH и программном обеспечении, с помощью которых они открываются, см. с дополнительноуюй подробную информацию далее. Кроме того, вы также можете узнать, как выполнить простое устранение неполадок при возникновении проблем при открытии файлов 3DH .

Популярность типов файлов
Ранг Файла
Статус файла
Страница Последнее обновление

Откройте файлы в %%os%% с помощью средства для просмотра файлов FileViewPro

Типы файлов 3DH

Ассоциация основного файла 3DH

Формат файла: .3dh
Тип файла: 3D Highway Base Map

Расширение файла 3DH в основном используется для 3-мерных шоссе базовых карт из обзора со стороны штата Нью-Йорк Департамент транспорта. 3-мерная шоссе базовая карта, скорее всего, будет какой-то специализированный метод проектирования. Расширение 3DH является устаревшим и больше не поддерживается.

Создатель: New York State Department of Transportation
Категория файла: Файлы трехмерных изображений
Ключ реестра: HKEY_CLASSES_ROOT\.3dh

Программные обеспечения, открывающие 3D Highway Base Map:

Ассоциации других файлов 3DH

Формат файла: .3dh
Тип файла: SeisWorks Horizontal Time-slice Format

Расширение 3DH файл связан с программным приложением геофизического для операционной системы Windows, известной как SeisWorks. Для этого файла, данные хранятся в горизонтальном формате время среза. Файл выступает в качестве хранилища для данных программного обеспечения. не расширение больше не используется.

Создатель: Halliburton
Категория файла: Файлы данных

Программы, открывающие файлы SeisWorks Horizontal Time-slice Format :

Попробуйте универсальное средство для просмотра файлов

В дополнение к продуктам, перечисленным выше, мы предлагаем вам попробовать универсальное средство для просмотра файлов типа FileViewPro. Данное средство может открывать более 200 различных типов файлов, предоставляя функции редактирования для большинства из них. Скачать FileViewPro можно здесь

Поиск типов файлов

Популярность файла 3DH

Самостоятельное устранение неполадок файла любого типа

Устранение неполадок при открытии файлов 3DH

Общие проблемы с открытием файлов 3DH

Unknown Software не установлен

Дважды щелкнув по файлу 3DH вы можете увидеть системное диалоговое окно, в котором сообщается «Не удается открыть этот тип файла». В этом случае обычно это связано с тем, что на вашем компьютере не установлено Unknown Software для %%os%%. Так как ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его дважды щелкнув на него.

Совет: Если вам извстна другая программа, которая может открыть файл 3DH, вы можете попробовать открыть данный файл, выбрав это приложение из списка возможных программ.

Установлена неправильная версия Unknown Software

В некоторых случаях у вас может быть более новая (или более старая) версия файла 3D Highway Base Map, не поддерживаемая установленной версией приложения. При отсутствии правильной версии ПО Unknown Software (или любой из других программ, перечисленных выше), может потребоваться загрузить другую версию ПО или одного из других прикладных программных средств, перечисленных выше. Такая проблема чаще всего возникает при работе в более старой версии прикладного программного средства с файлом, созданным в более новой версии, который старая версия не может распознать.

Совет: Иногда вы можете получить общее представление о версии файла 3DH, щелкнув правой кнопкой мыши на файл, а затем выбрав «Свойства» (Windows) или «Получить информацию» (Mac OSX).

Резюме: В любом случае, большинство проблем, возникающих во время открытия файлов 3DH, связаны с отсутствием на вашем компьютере установленного правильного прикладного программного средства.

Другие причины проблем с открытием файлов 3DH

Даже если на вашем компьютере уже установлено Unknown Software или другое программное обеспечение, связанное с 3DH, вы все равно можете столкнуться с проблемами во время открытия файлов 3D Highway Base Map. Если проблемы открытия файлов 3DH до сих пор не устранены, возможно, причина кроется в других проблемах, не позволяющих открыть эти файлы. Такие проблемы включают (представлены в порядке от наиболее до наименее распространенных):

  • Неверные ссылки на файлы 3DH в реестре Windows («телефонная книга» операционной системы Windows)
  • Случайное удаление описания файла 3DH в реестре Windows
  • Неполная или неправильная установка прикладного программного средства, связанного с форматом 3DH
  • Повреждение файла 3DH (проблемы с самим файлом 3D Highway Base Map )
  • Заражение 3DH вредоносным ПО
  • Повреждены или устарелидрайверы устройств оборудования, связанного с файлом 3DH
  • Отсутствие на компьютере достаточных системных ресурсов для открытия формата 3D Highway Base Map

Викторина: Какое расширение файла предназначено для аудио файла?

Верно!

AAC, или Advanced Audio Coding формат файла, с потерями цифровой формат сжатия звука. Это достигается лучшее качество звука, чем MP3 при той же скорости передачи данных.

Близко, но не совсем.

AAC, или Advanced Audio Coding формат файла, с потерями цифровой формат сжатия звука. Это достигается лучшее качество звука, чем MP3 при той же скорости передачи данных.

Лучшие операционные системы ПК

Windows (97.14%)
Macintosh (2.06%)
Linux (0.73%)
Chrome (0.05%)
Other (0.01%)

Событие дня

Перед AZW разжечь его заменил, формат MOBI электронных книг был стандартный формат для чтения электронных книг MobiPocket, Palm OS, Kindle и других. Mobi был выпущен в 2000 году Mobipocket. Хотя не формат MOBI файл по-прежнему можно найти, формат больше не поддерживается.

Как исправить проблемы с открытием файлов 3DH

Шаг 1

Выполните проверку файла 3DH на наличие вирусов

При наличии на компьютере установленной антивирусной программы можносканировать все файлы на компьютере, а также каждый файл в отдельности. Можно выполнить сканирование любого файла, щелкнув правой кнопкой мыши на файл и выбрав соответствующую опцию для выполнения проверки файла на наличие вирусов.

Например, на данном рисунке выделен файл my-file.3dh , далее необходимо щелкнуть правой кнопкой мыши по этому файлу, и в меню файла выбрать опцию «сканировать с помощью AVG». При выборе данного параметра откроется AVG Antivirus, который выполнит проверку данного файла на наличие вирусов.

Шаг 2

Переустановите Unknown Software

Иногда ошибка может возникнуть в результате неверной установки программного обеспечения, что может быть связано с проблемой, возникшей в процессе установки. Это может помешать вашей операционной системе связать ваш файл 3DH с правильным прикладным программным средством, оказывая влияние на так называемые «ассоциации расширений файлов».

Иногда простая переустановка Unknown Software может решить вашу проблему, правильно связав 3DH с Unknown Software. В других случаях проблемы с файловыми ассоциациями могут возникнуть в результате плохого программирования программного обеспечения разработчиком, и вам может потребоваться связаться с разработчиком для получения дополнительной помощи.

Совет: Попробуйте обновить Unknown Software до последней версии, чтобы убедиться, что установлены последние исправления и обновления.

Шаг 3

Получите другую копию файла 3DH

Это может показаться слишком очевидным, но зачастую непосредственно сам файл 3DH может являться причиной проблемы. Если вы получили файл через вложение электронной почты или загрузили его с веб-сайта, и процесс загрузки был прерван (например, отключение питания или по другой причине), файл может повредиться. Если возможно, попробуйте получить новую копию файла 3DH и попытайтесь открыть его снова.

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

Шаг 4

Обновите драйверы устройств, связанных с Unknown Developer

Если ваш файл 3DH связан с аппаратным обеспечением на вашем компьютере, чтобы открыть файл вам может потребоваться обновить драйверы устройств, связанных с этим оборудованием.

Эта проблема обычно связана с типами мультимедийных файлов, которые зависят от успешного открытия аппаратного обеспечения внутри компьютера, например, звуковой карты или видеокарты. Например, если вы пытаетесь открыть аудиофайл, но не можете его открыть, вам может потребоваться обновить драйверы звуковой карты.

Совет: Если при попытке открыть файл 3DH вы получаете сообщение об ошибке, связанной с .SYS file, проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств, которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc.

Шаг 5

Закройте другие запущенные приложения

Если шаги не решили проблему, и у вас все еще возникают проблемы с открытием файлов 3DH, это может быть связано с отсутствием доступных системных ресурсов. Для некоторых версий файлов 3DH могут потребоваться значительный объем ресурсов (например, память/ОЗУ, вычислительная мощность) для надлежащего открытия на вашем компьютере. Такая проблема встречается достаточно часто, если вы используете достаточно старое компьютерное аппаратное обеспечение и одновременно гораздо более новую операционную систему.

Такая проблема может возникнуть, когда компьютеру трудно справиться с заданием, так как операционная система (и другие службы, работающие в фоновом режиме) могут потреблять слишком много ресурсов для открытия файла 3DH. Попробуйте закрыть все приложения на вашем ПК, прежде чем открывать 3D Highway Base Map. Освободив все доступные ресурсы на вашем компьютере вы обеспечите налучшие условия для попытки открыть файл 3DH.

Шаг 6

Обновление аппаратного обеспечения компьютера

Если вы выполнили все описанные выше шаги, а ваш файл 3DH по-прежнему не открывается, может потребоваться выполнить обновление оборудования. В большинстве случаев, даже при использовании старых версий оборудования, вычислительная мощность может по-прежнему быть более чем достаточной для большинства пользовательских приложений (если вы не выполняете много ресурсоемкой работы процессора, такой как 3D-рендеринг, финансовое/научное моделирование или интенсивная мультимедийная работа). Таким образом, вполне вероятно, что вашему компьютеру не хватает необходимого объема памяти (чаще называемой «ОЗУ», или оперативной памятью) для выполнения задачи открытия файла.

Попробуйте обновить память, чтобы узнать, поможет ли это открыть файл 3DH. На сегодняшний день обновления памяти являются вполне доступными и очень простыми для установки даже для обычного пользователя компьютера. В качестве бонуса вы, вероятно, увидите хороший прирост производительности при выполнении вашим компьютером других задач.

Открытие 3DH файлов

У вас есть проблема с открытием .3DH-файлов? Мы собираем информацию о файловых форматах и можем рассказать для чего нужны файлы 3DH. Дополнительно мы рекомендуем программы, которые больше всего подходят для открытия или конвертирования таких файлов.

Для чего нужен файловый формат .3DH?

Каждый день тысячи пользователей присылают нам информацию о программах, которыми они пользуются для открытия различных файловых форматов.

В данный момент в нашей базе данных нет описания файлового типа 3DH, но мы можем порекомендовать некоторые программы, которые могут открыть эти файлы. Просмотрите список программного обеспечения, который рекомендуют другие пользователи для работы с данным форматом.

Так как мы добавляем описания файловых типов каждый день, информация о 3DH может появиться на нашем сайте в ближайшем будущем.

indbooks

Читать онлайн книгу

Приложение Б Функции DOS (INT 21h)

DOS, функция 00h

CS – сегмент PSP завершающегося процесса

Описание. Передает управление на вектор завершения в PSP (выходит в родительский процесс). Идентична функции INT 20h (Terminate). Регистр CS должен указывать на PSP. Восстанавливает векторы прерываний DOS 22h-24h (Завершение, Ctrl-Break и Критическая ошибка), устанавливая значения, сохраненные в родительском PSP. Выполняет сброс файловых буферов. Файлы должны быть предварительно закрыты, если их длина изменилась.

Данная функция не рекомендуется к использованию. Для выхода из программы лучше использовать функцию DOS 4Ch.

DOS, функция 01h Считать со стандартного устройства ввода

Выход: AL – символ, полученный из стандартного ввода

Описание. Считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо). При обнаружении Ctrl-Break выполняется INT 23h.

Ввод расширенных клавиш ASCII (F1-F12, PgUp, курсор и другие) требует двух обращений к этой функции. Первый вызов возвращает AL=0. Второй вызов возвращает в AL расширенный код ASCII.

DOS, функция 02h Записать в стандартное устройство вывода

DL – символ, выводимый в стандартный вывод

Посылает символ из DL в стандартное устройство вывода. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции. При обнаружении Ctrl-Break выполняется INT 23h.

DOS, функция 03h Считать символа со стандартного вспомогательного устройства

Выход: AL – символ, введенный со стандартного вспомогательного устройства

Описание. Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL.

Ввод не буферизуется и должен опрашиваться (не управляется прерываниями). При запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битные слова. Команда DOS MODE используется для установки иных характеристик.

DOS, функция 04h Записать символ в стандартное вспомогательное устройство

DL – символ, выводимый в стандартное вспомогательное устройство

Посылает символ, находящийся в регистре DL, на стандартное вспомогательное устройство, COM1 или AUX.

DOS, функция 05h Вывести на принтер

DL – символ, записываемый на стандартный принтер

Посылает символ в DL на стандартное устройство печати, обычно LPT1.

DOS, функция 06h Консольный ввод-вывод

DL=00h-FEh – символ, посылаемый на стандартный вывод

DL=FFh – запрос ввода со стандартного ввода

ZF=0, если осуществлялся ввод символа и символ готов при запросе ввода

AL – считанный символ

ZF=1, если осуществлялся ввод символа и символа в консоли нет

При DL=0FFh выполняет ввод с консоли «Без ожидания», возвращая включенный флаг нуля ZF, если на консоли нет готового символа. Если символ готов, сбрасывает флаг ZF и возвращает считанный символ в AL. Если DL не равен 0FFh, то DL направляется на стандартный вывод.

DOS, функция 07h Нефильтрующий консольный ввод без эха

Выход: AL – символ, полученный через стандартный ввод

Описание. Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. Не проверяет на Ctrl-Break, BackSpace и другие.

Для ввода расширенного символа ASCII должна быть вызвана дважды. Для проверки статуса используется функция DOS 0Bh (чтобы не ожидать нажатия клавиши).

DOS, функция 08h Консольный ввод без эха

Выход: AL – символ, полученный через стандартный ввод

Описание. Считывает (ожидает) символ со стандартного входного устройства и возвращает этот символ в AL. При обнаружении Ctrl-Break выполняется прерывание INT 23h.

Для ввода расширенного символа ASCII должна быть вызвана дважды.

DOS, функция 09h Запись строки на стандартный вывод

DS:DX – адрес строки, заканчивающейся символом «$» (ASCII 24h)

Строка, исключая завершающий ее символ «$», посылается на стандартный вывод. Символы Backspace обрабатываются как в функции 02h (вывод на дисплей). Чтобы перейти на новую строку, обычно включают в текст пару CR/LF (ASCII 0Dh и ASCII 0Ah). Строки, содержащие «$», можно передать на стандартное устройство вывода с помощью функции 40h (BX=0).

DOS, функция 0Ah Ввод строки в буфер

DS:DX – адрес входного буфера (Таблица Б-1)

Таблица Б-1. Формат входного буфера

Буфер содержит введенные данные, в конце – символ CR (ASCII 0Dh)

DOS, функция 0Bh Проверка статуса ввода

Выход: AL=FFh, если символ доступен со стандартного ввода AL=00h, если нет доступного символа

Описание. Проверяет состояние стандартного ввода. При распознавании Ctrl-Break выполняется INT 23h.

Используется перед функциями 01h, 07h и 08h, чтобы избежать ожидания нажатия клавиши.

Эта функция дает простой неразрушающий способ проверки Ctrl-Break в процессе длинных вычислений или другой обработки, обычно не требующей ввода. Это позволяет снимать счет по нажатию Ctrl-Break.

DOS, функция 0Ch Ввод с очисткой

AL – номер функции ввода DOS:

AL=01h – ввод с клавиатуры

AL=06h – ввод с консоли

AL=07h – нефильтрующий без эха

AL=08h – ввод без эха

AL=0Ah – буферизованный ввод

Очищает буфер опережающего ввода стандартного ввода, а затем вызывает функцию ввода, указанную в AL. Это заставляет систему ожидать ввод очередного символа.

DOS, функция 0Dh Сброс диска

Сбрасывает диск (записывает на диск все файловые буферы). Файл, размер которого изменился, должен быть предварительно закрыт (при помощи функций 10h или 3Eh).

DOS, функция 0Eh Установить текущий диск DOS

DL – номер диска (0 – A, 1 – B и так далее), который становится текущим

Выход: AL – общее число дисководов в системе

Описание. Диск, указанный в DL, становится текущим. Проверка: используется функция 19h (дать текущий диск). В регистре AL возвращается число дисководов всех типов, включая жесткие диски и «логические» диски (как диск B: системе с одним гибким диском).

AL имеет то же значение, что и LASTDRIVE, указанное в файле CONFIG.SYS, и по умолчанию равно 5.

DOS, функция 0Fh Открыть файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

Таблица Б-2. Формат FCB

AL=00h, если функция выполнена успешно (FCB заполнен)

AL=FFh, если файл не найден или доступ к файлу не разрешен

Файл, описываемый неоткрытым FCB, должен существовать в текущем оглавлении на диске, специфицированном в FCB (0 – текущий, 1 – A, 2 – B и так далее). Если файл не существует, возвращается AL=0FFh. Файл открывается в режиме совместимости. Если поле «Номер диска» в FCB равно нулю в момент вызова, то оно заполняется номером текущего дисковода (1 – A, 2 – B и так далее). Поле FCB «Номер текущего блока» устанавливается в ноль. Поле FCB «Размер логической записи» устанавливается в 80h. Поля даты и размера файла в FCB устанавливаются из оглавления.

DOS, функция 10h Закрыть файл через FCB

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если файл не найден там, где он находился при открытии с помощью функции 0Fh

Закрывает файл, открытый функцией 0Fh. Файл должен находиться на своем первоначальном месте в текущем оглавлении диска, на котором он был открыт. Если файл найден, оглавление обновляется, файловые буфера сбрасываются и возвращается AL=00h. Если файл не найден, оглавление не обновляется и возвращается AL=FFh.

DOS, функция 11h Найти первый совпадающий файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если подходящее имя найдено

AL=FFh, если подходящего имени нет

В текущем оглавлении DOS происходит поиск файлов с именем, соответствующим заданному шаблону. При неудаче возвращается AL=0FFh. Если имя найдено, AL очищается, в первый байт DTA помещается номер дисковода (A – 1, B – 2 и так далее), а в следующие 32 байта помещается элемент оглавления для найденного файла.

Можно использовать при вызове расширенный FCB, чтобы выбирать файлы с указанными атрибутами. В этом случае в DTA помещаются: байт FFh, 7 байт нулей, номер диска и элемент оглавления.

DOS, функция 12h Найти следующий совпадающий файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если подходящее имя найдено

DTA заполнен AL=FFh, если подходящего имени нет

Используется после вызова функции 11h (Найти первый совпадающий файл через FCB) с обобщенным именем файла. Каждый последующий вызов заполняет DTA очередным подходящим элементом оглавления и возвращает AL=00h. Если подходящих имен больше нет, возвращается AL=FFh.

Резервируемая область в FCB сохраняет информацию, необходимую для продолжения поиска. Поэтому не стоит открывать и изменять FCB между вызовами.

DOS, функция 13h Удалить файл через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если файл не найден или доступ к файлу не разрешен

Эта функция удаляет все подходящие файлы в текущем оглавлении указанного диска согласно спецификации в FCB. Если подходящие файлы не найдены или если доступ отвергнут (как при попытке удалить файл с атрибутом Read-Only), функция возвращает в регистре AL значение FFh.

DOS, функция 14h Последовательное чтение из файла через FCB

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если чтение было успешным и DTA содержит данные

AL=01h, если достигнут конец файла (EOF) и данные не считаны

AL=02h, если произошел выход за сегмент (чтения не было)

AL=03h, если EOF и считана усеченная запись (дополнена нулями)

Функция читает файл, специфицированный в FCB. Затем соответственно увеличивает значения полей в FCB.

Перед началом последовательной обработки файла нужно сбрасывать CurRec в ноль, так как функция 0Fh не инициализирует это поле.

DOS, функция 15h Последовательная запись в файл через FCB

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если запись была успешной

AL=01h, если ошибка переполнения диска (данные не записаны)

AL=02h, если произошел выход за сегмент (записи не было)

Функция записывает файл, специфицированный в FCB. Затем соответственно увеличивает значения полей в FCB.

Перед началом последовательной обработки файла нужно сбрасывать «Номер текщей записи» в ноль, так как функция 0Fh не инициализирует это поле.

DOS буферизует данные, записывая полный сектор за один раз.

DOS, функция 16h Создание файла через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно FCB заполнен

AL=FFh, если при выполнении функции возникли ошибки

Описание. Файл, специфицированный неоткрытым FCB, создается на диске, указанном в FCB (0 – текущий, 1 – A и так далее). Он открывается в текущем оглавлении этого диска. FCB заполняется аналогично функции 0Fh. Если файл существует в момент вызова, его элемент оглавления перекрывается новым файлом, а длина файла сбрасывается в ноль.

Handle-ориентированные функции DOS 2.0+ гораздо удобнее в работе.

DOS, функция 17h Переименовать файл через FCB

DS:DX – адрес измененного FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если при выполнении функции возникли ошибки

Переименовывает файл в текущем оглавлении.

DOS, функция 19h Получить текущий диск DOS

Выход: AL – номер текущего диска (0 – A, 1 – B, и так далее)

Возвращает номер дисковода текущего диска DOS.

DOS, функция 1Ah Установить адрес DTA

DS:DX – адрес DTA

Устанавливает адрес DTA. Все FCB-ориентированные операции работают с DTA. DOS не позволяет операциям ввода/вывода пересекать границу сегмента. Функции поиска 11h, 12h, 4Eh и 4Fh помещают данные в DTA. DTA глобальна, поэтому надо проявлять осторожность при назначении ее в рекурсивной процедуре. При запуске программы ее DTA устанавливается по смещению 80h относительно PSP.

DOS, функция 1Bh Получить информацию FAT для текущего диска

DS:BX – адрес байта FAT ID, отражающего тип диска (Таблица Б-3)

DX – всего кластеров (единиц распределения) на диске

AL – секторов на кластер

CX – байт на сектор

Таблица Б-3. Значения ID

Возвращает информацию о размере и типе текущего диска. Размер диска (в байтах) равен DX*AL*CX. Свободную память можно найти функциями 36h или 32h.

Версии: DOS 1.x держит FAT в памяти и возвращает DS:BX => FAT. DOS 2.0+ может держать в памяти лишь часть всей FAT.

Эта функция изменяет содержимое регистра DS.

DOS, функция 1Ch Получить информацию FAT для указанного диска

DL – номер диска (0 – текущий, 1 – A и так далее)

DS:BX – адрес байта FAT ID, отражающего тип диска (приведен в описании функции 1Bh)

DX – всего кластеров (единиц распределения)

AL – секторов на кластер

CX – байт на сектор

Аналогична функции 1Bh с той разницей, что регистр DL указывает диск, для которого нужно получить информацию.

DOS, функция 21h Считать произвольную запись файла

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если чтение было успешным и DTA заполнена данными

AL=01h, если достигнут конец файла (EOF) и чтения не было

AL=02h, если произошел выход за сегмент (чтения нет)

AL=03h, если встречен EOF и усеченная запись дополнена нулями

Данная функция читает из файла с текущей позиции как с указанной в полях FCB «Запись с текущей позиции» и «Номер записи при непосредственном доступе к файлу».

DOS, функция 22h Писать произвольную запись файла

DS:DX – адрес открытого FCB (Таблица Б-2)

AL=00h, если запись была успешной

AL=01h, при переполнении диска

AL=02h, если DTA+FCB выходит за сегмент (нет записи)

Данная функция записывает в файл с текущей позиции как с указанной в полях FCB «Запись с текущей позиции» и «Номер записи при непосредственном доступе к файлу».

DOS, функция 23h Получить размер файла через FCB

DS:DX – адрес неоткрытого FCB (Таблица Б-2)

AL=00h, если функция выполнена успешно

AL=FFh, если при выполнении функции возникли ошибки

Проще определить размер файла при помощи функции 3Dh с последующим выполнением 42h (при AL=2).

DOS, функция 24h Установить адрес произвольной записи в файле

DS:DX – адрес открытого FCB (Таблица Б-2)

Устанавливает поле «Номер записи при непосредственном доступе к файлу» в FCB на файловый адрес, соответствующий значениям полей «Текущий блок» и «Запись с текущей позиции».

DOS, функция 25h Установить вектор прерывания

AL – номер прерывания

DS:DX – вектор прерывания – адрес программы обработки прерывания

Описание. Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL, равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS знает, что происходит, и гарантирует, что в момент записи прерывания будут заблокированы.

Восстановить DS (если необходимо) после этого вызова.

DOS, функция 26h Создать новый PSP

DX – адрес сегмента (параграфа) для нового PSP

CS – сегмент PSP, используемый как шаблон для нового PSP (Таблица Б-4)

Описание. Устанавливает PSP для порождаемого процесса по адресу DX:0000. Текущий PSP (100h байт, начиная с CS:0) копируется в DX:0000h, поле MemTop соответственно корректируется, векторы Terminate, Ctrl-Break и Critical Error копируются в PSP из векторов прерываний INT 22h, INT 23h и INT 24h. После этого можно загрузить программу с диска и передать ей управление посредством FAR JMP.

Если перехватывается INT 21h, нужно позаботиться о помещении в стек корректного CS: IP. Еще лучше использовать функцию 4Ch.

Таблица Б-4. Формат PSP

DOS, функция 27h Читать произвольный блок файла

DS:DX – адрес открытого FCB (Таблица Б-2)

CX – число считываемых записей

Выход: AL=00h, если чтение успешно и DTA заполнена данными AL=01h если достигнут конец файла (EOF) и данные не считаны AL=02h, если при чтении произошел выход за границу сегмента AL=03h, если EOF и считана усеченная порция (дополнена нулями) CX – действительное число считанных записей

Читает несколько записей из файла, начиная с файлового адреса, указанного полем «Номер записи при непосредственном доступе к файлу» в FCB. Помещает данные в память, начиная с адреса DTA. Соответствующие поля FCB корректируются, чтобы указывать на следующую запись (первую за прочитанными).

DOS, функция 28h Писать произвольный блок файла

DS:DX – адрес открытого FCB (Таблица Б-2)

CX – число записываемых блоков (если CX равен нулю, то размер файла усекается до указанного в поле FCB «Номер записи при непосредственном доступе к файлу»)

AL=00h, если запись успешна

AL=01h, при переполнении диска

AL=02h, если при записи произошел выход за границу сегмента

CX – действительное число сделанных записей

Описание. Записывает несколько блоков в файл, начиная с файлового адреса, указанного полем «Номер записи при непосредственном доступе к файлу» в FCB. Читает данные из памяти, начиная с адреса DTA. Соответствующие поля FCB корректируются, чтобы указывать на следующую запись (первую за прочитанными).

DOS, функция 29h Разобрать имя файла

DS:SI – адрес исходной текстовой строки для разбора

ES:DI – адрес буфера для результирующего неоткрытого FCB (Таблица Б-2)

AL – битовые флаги, указывающие опции разбора (Таблица Б-5).

AL=00h, если результирующий FCB не содержит обобщенных символов

AL=01h, если результирующий FCB содержит обобщенные символы

AL=FFh, если неверно обозначение диска в имени файла

DS:SI – изменен – указывает на символ сразу вслед за именем файла

ES:DI – не изменен – указывает на неоткрытый FCB

Создает неоткрытый FCB из строки текста или параметра команды. Текст, начиная с DS:SI, анализируется как имя файла в формате D: FILENAME.EXT, и буфер по адресу ES:DI заполняется как соответственно форматированный FCB.

Таблица Б-5. Битовые флаги

DOS, функция 2Ah Получить системную дату

AL – день недели (0 – воскресенье, 1 – понедельник, … 6 – суббота), DOS 3.0+

CX – год (от 1980 до 2099)

DH – месяц (1 до 12)

DL – день (1 до 31)

Описание. Возвращает текущую дату, которая известна системе.

DOS 2.x не гарантирует возврата в AL значения дня.

DOS 1.0+ возвращает правильный день недели.

Версии до 2.1 имеют проблемы с переходом через дату.

DOS, функция 2Bh Установить системную дату

CX – год (от 1980 до 2099)

DH – месяц (от 1 до 12)

DL – день (от 1 до 31)

AL=00h, если дата корректна

AL=FFh, если дата некорректна и не изменена

Устанавливает системную дату DOS.

DOS, функция 2Ch Получить время DOS

CH – часы (от 0 до 23)

CL – минуты (от 0 до 59)

DH – секунды (от 0 до 59)

DL – сотые доли секунды (от 0 до 99)

Описание. Возвращает текущее время, которое известно системе.

Поскольку системные часы имеют частоту 18.2 Гц (интервал 55мс), DL имеет точность примерно 0.04 сек.

DOS, функция 2Dh Установить время DOS

CH – часы (от 0 до 23)

CL – минуты (от 0 до 59)

DH – секунды (от 0 до 59)

DL – сотые доли секунды (от 0 до 99)

AL=00h, если время корректно

AL=FFh, если время некорректно и не изменено

Устанавливает системное время DOS.

DOS, функция 2Eh Установить/сбросить переключатель верификации

AL=00h – отключить верификацию

AL=01h – включить верификацию

Описание. Задает, должна ли DOS верифицировать (считывать обратно) каждый сектор, записываемый на диск. Это замедляет операции записи на диск, но гарантирует максимальную надежность записи.

DOS, функция 2Fh Получить адрес текущей DTA

Выход: ES:BX – адрес начала текущей DTA

Описание. Возвращает адрес начала области ввода-вывода (DTA). Поскольку DTA глобальна для всех процессов, в рекурсивной процедуре (например, при проходе по дереву оглавления) может потребоваться сохранить адрес DTA, а впоследствии восстановить его посредством функции 1Ah.

Примечание. Эта функция изменяет сегментный регистр ES.

Версии: DOS 2.00 и выше DOS, функция 30h Получить номер версии DOS

AL – старший номер версии

AH – младший номер версии

BL:CX – 24-битный серийный номер (большинство версий не поддерживают этот параметр)

Описание. Возвращает в AX значение текущего номера версии DOS. Например, для DOS 3.20 в AL возвращается 03h, в AH – 14h.

Примечание. Если в AL возвращается 00h, можно предполагать, что работает DOS более ранней версии, чем DOS 2.0.

Версии: DOS 2.00 и выше. DOS, функция 31h Завершиться и остаться резидентным

DX – объем памяти, оставляемой резидентной (в параграфах)

Описание. Выходит в родительский процесс, сохраняя код выхода в AL. Код выхода можно получить через функцию 4Dh. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт равно DX*16). Эта функция перекрывает функцию INT 27h, которая не возвращает код выхода и не способна установить резидентную программу, размер которой превышает 64 Кбайт.

Версии: DOS 2.00 и выше. DOS, функция 32h Получить информацию DOS о диске (Официально не документирована)

DL – номер диска (0 – текущий, 1 – A и так далее)

AL=00h, если в DL был задан корректный диск

DS:BX – адрес блока информации о диске для запрошенного устройства (Таблица Б-6)

AL=FFh, если в DL был задан некорректный диск

Возвращает блок информации, представляющей интерес для приложений и утилит, которые выполняют доступ к дискам, поддерживаемым драйверами устройств, на уровне секторов.

Некоторые дисководы (особенно незагружаемые) функционируют только через свои драйвера устройств. Такие диски могут содержать неверную информацию в корневой записи и таблице разделов, что делает очень трудным определение, например, размера корневого оглавления, числа таблиц FAT и прочего. Блок информации диска содержит такие данные в хорошо форматированной структуре.

Версии: DOS 2.00 и выше. Таблица Б-6. Формат блока информации о диске

DOS, функция 33h Установить/опросить статус Ctrl-Break

AL=00h – опросить текущий статус контроля Ctrl-Break

AL=01h – установить статус контроля Ctrl-Break

DL – требуемый статус (0 – выключен, 1 – включен)

Выход: DL – текущий статус (0 – выключен, 1 – включен)

Если AL=00h, в DL возвращается текущий статус контроля Ctrl-Break.

Если AL=01h, в DL возвращается новый текущий статус.

Когда статус «включен», DOS при выполнении большинства функций (исключая 06h и 07h) проверяет, нажаты ли клавиши Ctrl-Break. Если это обнаружено, выполняется прерывание INT 23h (если оно не перехватывается, то процесс снимается).

При статусе «выключен» DOS проверяет на нажатие Ctrl-Break лишь при выполнении операций стандартного ввода/вывода, стандартной печати и стандартного AUX.

Версии: DOS 2.00 и выше. DOS, функция 34h Получить адрес флага активности DOS (Официально не документирована)

Выход: ES:BX – адрес флага активности DOS

Функция возвращает флаг активности DOS, который показывает, можно ли на данный момент вызывать функции DOS. Эту функцию использует, например, функция фоновой печати PRINT.

Если ES: [BX] не нулевой, фоновая программа (TSR либо popup) не должна использовать никаких функций DOS.

Версии: DOS 2.00 и выше. DOS, функция 35h Получить вектор прерывания

AL – номер прерывания (00h до FFh)

Выход: ES:BX – адрес обработчика прерывания

Описание. Возвращает значение вектора прерывания для INT (AL), то есть загружает в BX 0000:[AL*4], а в ES – 0000:[(AL*4)+2].

Примечание. Эта функция изменяет сегментный регистр ES.

Версии: DOS 2.00 и выше. DOS, функция 36h Получить свободную память диска

DL – номер диска (0 – текущий, 1 – A и так далее)

AX=FFFFh, если AL содержал неверный номер диска

Если функция выполнена успешно:

AX – число секторов на кластер

BX – число доступных кластеров

CX – байт на сектор

DX – всего кластеров на диске

Описание. Возвращает данные, полезные для подсчета общей и доступной дисковой памяти. Если в AX возвращено FFFFh, значит задан неверный диск. Иначе свободная память (в байтах) составляет (AX*BX*CX), всего памяти (AX*CX*DX) байт.

Версии: DOS 2.00 и выше. DOS, функция 37h Установить/опросить символ-переключатель (Официально не документирована)

AL=00h – опросить текущий переключатель

AL=01h – установить символ-переключатель

AL=00h, если функция выполнена успешно

DL – текущий символ-переключатель DOS (если при вызове AL=00h)

AL=FFh, если использована неподдерживаемая подфункция

Описание. Устанавливает или опрашивает «Глобальный переключатель» DOS. Переключатель (SWITCHAR) – это символ, используемый в командной строке как признак опции. По умолчанию принимается «/» (например, DIR /w/p), но его можно изменить на «-» (DIR – w-p), если нужно, чтобы система была больше похожа на UNIX. Общепринято опрашивать значение SWITCHAR перед разбором области неформатированных параметров в PSP для выделения опций команды.

Примечание. Эта недокументированная команда может измениться в будущих версиях DOS. Не рекомендуется изменять SWITCHAR.

Версии: DOS 2.00 и выше. DOS, функция 38h Получить/установить информацию о стране

AL=00h – получить данные для текущей страны

DS:DX – адрес локального буфера для чтения блока данных страны (Таблица Б-7)

AL=01h-FEh – установить данные для указанной страны 255

BX – 16-битный код страны (Таблица Б-8)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Если DX=FFFFh, то текущий код страны устанавливается равным AL (если AL=FFh, то код страны устанавливается равным BX). Обычно код страны устанавливается в файле CONFIG.SYS. Если DX Таблица Б-7. Формат блока данных страны

DOS, функция 39h Создать новое оглавление

DS:DX – адрес строки ASCIZ с именем оглавления

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Таблица Б-8. Коды некоторых стран

Если диск и/или корневой путь не указаны, то новое оглавление создается в текущей директории. Поддиректория создается и связывается с существующим деревом. Если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не создается.

Версии: DOS 2.00 и выше. DOS, функция 3Ah Удалить оглавление

DS:DX – адрес строки ASCIZ с именем оглавления

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или корневой путь не указаны, принимаются значения по умолчанию. Поддиректория удаляется из структуры оглавлений. Если флаг CF установлен при возврате, то AX содержит код ошибки, и оглавление не удаляется.

Примечание. Оглавление не должно содержать файлов и поддиректорий, оно не должно попадать под влияние возможных ограничений DOS (например, не должно быть задействовано в активных командах JOIN или SUBST).

Версии: DOS 2.00 и выше. DOS, функция 3Bh Установить текущую директорию

DS:DX – адрес строки ASCIZ с именем оглавления

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или корневой путь не указаны, принимаются значения по умолчанию. Указанная поддиректория становится текущим оглавлением DOS для этого (или текущего) диска. Если флаг CF установлен при возврате, то AX содержит код ошибки, и текущее оглавление для выбранного диска не изменяется.

Версии: DOS 2.00 и выше. DOS, функция 3Ch Создать файл через описатель

DS:DX – адрес строки ASCIZ с именем файла

CX – атрибут файла (атрибуты приведены в описании функции DOS 43h)

CF=0, если функция выполнена успешно

AX – описатель файла

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или путь не указаны, принимаются значения по умолчанию.

Версии: DOS 2.00 и выше. DOS, функция 3Dh Открыть описатель файла

DS:DX – адрес строки ASCIZ с именем файла

AL – режим открытия:

AL=00h, чтобы открыть для чтения

AL=01h, чтобы открыть для записи

AL=02h, чтобы открыть для чтения и записи

CF=0, если функция выполнена успешно

AX – описатель файла

CF=1, если при выполнении функции возникли ошибки

Описание. Файл открывается в выбранном режиме доступа (режиме открытия). Если диск и/или путь не указаны, принимаются указанные по умолчанию. Файл должен существовать. Указатель чтения/записи устанавливается в ноль.

Версии: DOS 2.00 и выше. DOS, функция 3Eh Закрыть описатель файла

BX – описатель файла

CF=0, если функция выполнилась успешно

CF=1, если при выполнении функции возникли ошибки

Описание. BX содержит описатель файла (handle), возвращенный при открытии. Файл, представленный этим описателем, закрывается, его буферы сбрасываются и оглавление обновляется корректными размером, временем и датой. Из-за недостатка описателей файлов (максимум 20, по умолчанию установлено 8), возможно, придется закрыть часть текущих описателей, как, например, описатель 3 (стандартный AUX).

Версии: DOS 2.00 и выше. DOS, функция 3Fh Читать файл через описатель

BX – описатель файла

DS:DX – адрес буфера для чтения данных

CX – число считываемых байт

CF=0, если функция выполнена успешно

AX – число действительно прочитанных байт

CF=1, если при выполнении функции возникли ошибки

Описание. CX байт данных считываются из файла или устройства с описателем, указанным в BX. Данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX. Если необходимо установить позицию чтения/записи, можно использовать функцию 42h. Эта функция обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям чтения или записи.

Версии: DOS 2.00 и выше. DOS, функция 40h Писать в файл через описатель

BX – описатель файла

DS:DX – адрес буфера, содержащего записываемые данные

CX – число записываемых байт

CF=0, если функция выполнена успешно

AX – число действительно записанных байт

CF=1, если при выполнении функции возникли ошибки

Описание. CX байт данных записываются в файл или на устройство с описателем, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX, и записываются, начиная с текущей позиции указателя чтения/записи файла. Чтобы установить указатель файла, если необходимо, можно использовать функцию 42h. Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям чтения или записи.

Версии: DOS 2.00 и выше. DOS, функция 41h Удалить файл

DS:DX – адрес строки ASCIZ с именем файла

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Файл удаляется из оглавления заданного диска. Если диск и/или путь не указаны, принимаются значения по умолчанию. Имя файла не может содержать обобщенные символы («?» и «*»). Если файл имеет атрибут «только чтение», то перед удалением необходимо изменить этот атрибут через функцию 43h.

Версии: DOS 2.00 и выше. DOS, функция 42h Переместить указатель файла

BX – описатель файла

CX:DX на сколько передвинуть указатель: (CX*65536)+DX

AL=00h переместить относительно начала файла +CX:DX

AL=01h переместить относительно текущей позиции +CX:DX

AL=02h переместить относительно конца файла +CX:DX

CF=0, если функция выполнена успешно

DX:AX новая позиция указателя файла (если нет ошибки)

CF=1, если при выполнении функции возникли ошибки

Описание. Перемещает логический указатель чтения/записи к нужной позиции. Очередная операция чтения или записи начнется с этого адреса.

Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX.

Действительная длина файла равна (DX*65536)+AX.

Версии: DOS 2.00 и выше. DOS, функция 43h Установить/опросить атрибуты файла

DS:DX – адрес строки ASCIZ с именем файла

AL=00h – извлечь текущий атрибут файла

AL=01h – установить атрибут файла

CX – новый атрибут файла (для подфункции 01h)(Таблица Б-9)

CF=0, если функция выполнена успешно

CX – текущий атрибут файла (для подфункции 00h)(Таблица Б-9)

CF=1, если при выполнении функции возникли ошибки

Таблица Б-9. Атрибуты файла

Атрибут файла читается или устанавливается, согласно коду в AL. Если диск и/или путь не указаны, принимаются значения по умолчанию.

Примечание. Чтобы скрыть оглавление, нужно использовать CX=02h (а не 12h, как можно было ожидать).

Версии: DOS 2.00 и выше. DOS, функция 44h Управление устройством ввода/вывода

AL – код подфункции:

AL=00h – получить информацию об устройстве

AL=01h – установить информацию об устройстве

AL=02h – читать с символьного устройства

AL=03h – писать на символьное устройство

AL=04h – читать с блочного устройства

AL=05h – писать на блочное устройство

AL=06h – дать статус ввода

AL=07h – дать статус вывода

AL=08h – запрос съемного носителя

AL=09h – запрос удаленного устройства

AL=0Ah – запрос удаленного описателя

AL=0Bh – счет повторов разделения

AL=0Ch – кодовые страницы 3.3

AL=0Dh – общий IOCTL

AL=0Eh – получить логическое устройство

AL=0Fh – установить логическое устройство

Версии: DOS 2.00 и выше. DOS, функция 45h Дублировать описатель файла

BX – существующий описатель файла

CF=0, если функция выполнена успешно

AX – новый описатель файла, дублирующий оригинал

CF=1, если при выполнении функции возникли ошибки

Описание. Создает дополнительный описатель файла, ссылающийся на тот же поток ввода/вывода, что и существующий описатель. Любое продвижение указателя чтения/записи одного описателя (включая любые операции чтения, записи или перемещения указателя посредством функции 42h) действует на его дубликат.

Версии: DOS 2.00 и выше. DOS, функция 46h Переназначить описатель

BX – целевой описатель файла (должен уже существовать)

CX – исходный описатель файла (должен уже существовать)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Заставляет описатель файла (handle) ссылаться на другой файл или устройство. Если описатель в CX (источник) открыт, он закрывается, а затем становится дубликатом описателя в BX (назначения). Иными словами, описатели в CX и BX будут ссылаться на один и тот же физический файл или устройство.

Версии: DOS 2.00 и выше. DOS, функция 47h Получить текущее оглавление DOS

DS:SI – адрес локального буфера для результирующего пути – 64 байта

DL – номер диска (0 – текущий, 1 – A и так далее)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. В буфер по адресу DS:SI помещается в форме ASCIZ путь текущего оглавления для диска, указанного в DL. Путь возвращается в формате: «путь\оглавление»,0. Впереди не подставляется буква диска, а сзади не подставляется символ «\». Например, если текущим является корневое оглавление, эта функция вернет пустую строку (DS: [SI]=0).

Версии: DOS 2.00 и выше. DOS, функция 48h Выделить память

BX – запрошенное количество памяти в 16-байтных параграфах

CF=0, если функция выполнена успешно

AX – сегментный адрес распределенного блока

CF=1, если при выполнении функции возникли ошибки

BX – размер максимального доступного блока памяти (в параграфах)

Описание. Распределяет блок памяти длиной BX параграфов, возвращая сегментный адрес этого блока в AX (блок начинается с AX:0000). Если распределение неудачно, устанавливается флаг CF, в AX возвращается код ошибки, а BX содержит максимальный размер доступной для распределения памяти (в параграфах). Чтобы определить наибольший доступный блок, общепринято устанавливать BX=FFFFh перед вызовом. Распределение завершится с ошибкой, возвратив размер максимального блока памяти в BX.

Версии: DOS 2.00 и выше. DOS, функция 49h Освободить блок памяти

ES – сегментный адрес освобождаемого блока памяти

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Освобождает блок памяти, начинающийся с адреса ES:0000. Этот блок становится доступным для других запросов системы. Вообще говоря, нужно освобождать лишь те блоки памяти, которые получены через функцию 48h (распределить память). Родитель отвечает за освобождение памяти порожденных процессов. Тем не менее, ничто не препятствует освобождать память чужих процессов.

Версии: DOS 2.00 и выше. DOS, функция 4Ah Изменить размер блока памяти

ES – сегмент распределенного блока памяти

BX – нужный размер блока в 16-байтных параграфах

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

BX – размер максимального доступного блока памяти (в параграфах)

Описание. Изменяет размер существующего блока памяти. Когда программа получает управление, функция 4Bh уже распределила блок памяти, начиная с PSP, который содержит всю доступную память. Чтобы освободить память для запуска порождаемых процессов, блок памяти, начинающийся с PSP, необходимо сначала сжать.

Функция 31h и INT 27h (TSR) сжимают блок по адресу PSP.

Версии: DOS 2.00 и выше.

DOS, функция 4Bh Выполнить или загрузить программу

DS:DX – адрес строки ASCIZ с именем файла, содержащего программу

ES:BX – адрес EPB (блока параметров EXEC)

AL=00h – загрузить и выполнить

AL=01h – загрузить, но не выполнять

AL=03h – загрузить программный оверлей

CF=0, если функция выполнена успешно

BX, DX не сохранены

CF=1, если при выполнении функции возникли ошибки

Описание. Данная функция загружает в память и запускает программу, имя которой указано в регистрах DS:DX. Запущенная программа после завершения работы возвратит управление запускаемой. Если диск или путь не указаны, принимаются значения по умолчанию. ES:BX указывает на блок памяти, подготовленный как EPB, формат которого зависит от запрошенной подфункции в AL.

Версии: DOS 2.00 и выше. DOS, функция 4Ch Завершить программу

Описание. Возвращает управление от порожденного процесса его родителю, устанавливая код выхода (его можно опросить функцией 4Dh). Управление передается по адресу завершения в PSP завершающейся программы. Векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненным в родительском PSP.

Примечание. Значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.

Версии: DOS 2.00 и выше. DOS, функция 4Dh Получить код выхода программы

AH – код выхода последнего завершившегося процесса

AH=00h – нормальное завершение

AH=01h – завершение через Ctrl-Break INT 23h

AH=02h – завершение по критической ошибке устройства INT 24h

AH=03h – завершение через функцию 31h

Описание. Возвращает код выхода последнего из завершившихся процессов. Эта функция возвращает правильную информацию только однажды для каждого завершившегося процесса.

Версии: DOS 2.00 и выше. DOS, функция 4Eh Найти первый совпадающий файл

DS:DX – адрес строки ASCIZ с именем файла (допускается использовать символы «?» и «*»)

CX – атрибут файла для сравнения

CF=0, если функция выполнена успешно

DTA заполнена данными (Таблица Б-10)

CF=1, если при выполнении функции возникли ошибки

Описание. Если диск и/или путь не указаны, принимаются значения по умолчанию. Обобщенные символы «*» и «?» допускается использовать в имени файла и расширении.

Версии: DOS 2.00 и выше. DOS, функция 4Fh Найти следующий совпадающий файл

DS:DX – адрес данных, возвращенных предыдущей 4Eh (Найти первый файл)

Таблица Б-10. Формат данных в DTA

CF=0, если функция выполнена успешно

DTA заполнена данными

CF=1, если при выполнении функции возникли ошибки

Описание. Эту функцию можно использовать после вызова 4Eh. Следующее имя файла, совпадающее по обобщенному имени и атрибуту файла, копируется в буфер по адресу DS:DX вместе с другой информацией (Таблица Б-10).

Примечание. Параметр DS:DX добавлен в DOS 3.0.

Версии: DOS 2.00 и выше. DOS, функция 52h Получить адрес векторной таблицы связи (Официально не документирована)

Выход: ES:BX – адрес векторной таблицы связи (Таблица Б-11)

Описание. Данная функция возвращает адрес векторной таблицы связи.

Версии: DOS 2.00 и выше. DOS, функция 54h Получить переключатель верификации DOS

AL=00h, если верификация выключена (OFF)

AL=01h, если верификация включена (ON)

Описание. Возвращает текущий статус верификации записи DOS. Если в AL возвращается 1, то DOS считывает обратно каждый сектор, записываемый на диск, чтобы проверить правильность записи. Функция DOS 2Eh позволяет установить/изменить режим верификации.

Версии: DOS 2.00 и выше. Таблица Б-11. Формат векторной таблицы связи

DOS, функция 56h Переименовать/переместить файл

DS:DX – адрес старого ASCIZ имени (путь/имя существующего файла)

ES:DI – адрес нового ASCIZ имени (новые путь/имя)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Старое имя DS:DX должно существовать и не может содержать обобщенных символов. Диск и путь необязательны (если они не указаны, принимаются значения по умолчанию). Новое имя ES:DI должно описывать несуществующий файл. Если указан диск, он должен быть тем же, что и в старом имени. Если диск или путь не указаны, принимаются текущие. Если старое и новое имя содержат разные пути (явные или принятые по умолчанию), то элемент оглавления для файла перемещается в оглавление, указанное в новом имени.

Версии: DOS 2.00 и выше. DOS, функция 57h Установить/опросить дату/время файла

AL=00h – получить дату/время файла

AL=01h – установить дату/время файла

BX – описатель файла (handle)

CX (если AL=1) – новая отметка времени в формате время файла

DX (если AL=1) – новая отметка даты в формате дата файла

CF=0, если функция выполнена успешно

CX – (если при вызове AL=0) отметка времени файла в формате время/дата файла (Таблица Б-12)

Таблица Б-12. Формат времени файла

DX – (если при вызове AL=0) отметка даты файла в формате время/дата файла (Таблица Б-13)

Таблица Б-13. Формат даты файла

CF=1, если при выполнении функции возникли ошибки

Описание. BX должен содержать описатель открытого файла (см. 3Ch или 3Dh). DX и CX задаются в формате памяти (например, младшие 8 бит даты находятся в DH).

Версии: DOS 2.00 и выше. DOS, функция 59h Получить расширенную информацию об ошибке

BX=0000h (номер версии: 0000h для DOS 3.0, 3.1 и 3.2)

AX – расширенный код ошибки (0, если ошибки не было)

BH – класс ошибки

BL – предлагаемое действие

CH – сфера (где произошла ошибка)

Описание. Эту функцию можно использовать, чтобы уточнить, что предпринять после сбоя функции DOS по ошибке (только DOS 3.0+). Ее можно вызывать: в обработчике критических ошибок INT 24h, после любой функции INT 21h, возвратившей флаг переноса после вызова FCB-функции, возвратившей AL=FFh.

Версии: DOS 3.00 и выше. DOS, функция 5Ah Создать уникальный временный файл

DS:DX – адрес строки ASCIZ с диском и путем (заканчивается символом «\»)

CX – атрибут файла

CF=0, если функция выполнена успешно

AX – описатель файла

DS:DX – (не изменяется) полное ASCIZ-имя нового файла

CF=1, если при выполнении функции возникли ошибки

Описание. Открывает (создает) файл с уникальным именем в каталоге, заданном строкой ASCIZ, на которую указывает DS:DX. COMMAND.COM вызывает эту функцию, когда создает временные «канальные» файлы, используемые при переназначении ввода-вывода. Описание пути должно быть готово к добавлению в его конец имени файла. Необходимо обеспечить минимум 12 байт в конце строки. Сама строка должна быть заполнена в одной из форм: «^: \путь\»,0 (указан диск и путь), «d:»,0 (текущее оглавление диска) или «d: \»,0 (корневое оглавление диска).

Версии: DOS 3.00 и выше. DOS, функция 5Bh Создать новый файл

DS:DX – адрес строки ASCIZ с именем файла

CX – атрибут файла

CF=0, если функция выполнена успешно

AX – описатель файла

CF=1, если при выполнении функции возникли ошибки

Описание. Файл открывается для чтения/записи в совместимом режиме доступа. Если диск и/или путь не указаны, принимаются значения по умолчанию. Этот вызов идентичен функции DOS 3Ch с тем исключением, что он вернет ошибку, если файл с заданным именем уже существует.

Версии: DOS 3.00 и выше. DOS, функция 5Ch Блокировать/разблокировать доступ к файлу

AL=00h – заблокировать область файла

AL=01h – разблокировать ранее заблокированную область

BX – описатель файла

CX:DX – смещение ((CX*65536)+DX) от начала файла

SI:DI – длина блокируемой области ((SI*65536)+DI) байт

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Блокирует или освобождает доступ к участку файла, указанного в BX. Область файла с логическим смещением CX:DX и длиной SI:DI блокируется (захватывается) или разблокируется (освобождается). Смещение и длина обязательно должны быть указаны. Разделение файлов должно быть активизировано (командой SHARE), иначе функция вернет код ошибки «Неверный номер функции».

Версии: DOS 3.00 и выше (при обязательной загрузке SHARE). DOS, функция 62h Получить адрес PSP

Выход: BX – сегментный адрес PSP выполняющейся программы

Описание. Эта функция возвращает в BX адрес PSP текущей программы. Используется, для получения адреса параметров командной строки, адреса окружения DOS и другой полезной информации, содержащейся в PSP.

Версии: DOS 3.00 и выше. DOS, функция 65h Получить расширенную информацию страны

AL=01h – дать расширенную информацию страны DOS 3.3

AL=02h – дать таблицу преобразования строчных букв в прописные

AL=04h – то же для символов, допустимых в именах файлов

AL=06h – дать сопоставляющую последовательность

BX – кодовая страница (FFFFh – консоль)

CX – размер буфера возврата (должен быть минимум 5 байт)

ES:DI – адрес буфера возврата

CF=0, если функция выполнена успешно

ES:DI – адрес возвращенной информации

CF=1, если при выполнении функции возникли ошибки:

Описание. Эта функция возвращает различную национальную информацию. Используется для получения формата даты, символа валюты и других данных, необходимых для вывода и сортировки информации (во всех странах, кроме США).

Версии: DOS 3.30 и выше. DOS, функция 66h Получить/установить глобальную кодовую страницу

AL=01h – запросить текущую глобальную кодовую страницу

AL=02h – установить активную кодовую страницу

BX – (при AL=02h) кодовая страница (Таблица Б-14)

DX – (при AL=02h) системная кодовая страница (устанавливаемая при загрузке)

CF=0, если функция выполнена успешно

Таблица Б-14. Значения кодовых страниц

BX – (если при вызове AL=01h) текущая активная кодовая страница

DX – (если при вызове AL=01h) системная кодовая страница (устанавливаемая при загрузке)

CF=1, если при выполнении функции возникли ошибки

Описание. Эта функция выбирает новую кодовую страницу или получает значение текущей активной кодовой страницы (страниц). Программа DOS NLSFUNC должна быть загружена до этого вызова. Функция используется в сочетании с 65h или 38h.

Примечание. Устанавливая новую активную кодовую страницу, DOS читает данные из файла COUNTRY.SYS.

Версии: DOS 3.30 и выше. DOS, функция 67h Установить число описателей файлов

BX – максимальное число описателей (до FFFFh)

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

Описание. Эта функция устанавливает максимальное число описателей файлов, которые могут быть открыты одновременно. Если значение BX меньше 20, то принимается 20. Если значение BX меньше текущего максимума (нужно сократить число описателей), и в данный момент открыто более чем BX файлов, то изменение будет иметь место, когда число открытых файлов не будет превышать устанавливаемый максимум. Если BX больше текущего максимума (нужно увеличить число описателей), то DOS должна иметь доступную память, чтобы распределить ее под новые описатели. Функция 4Ah позволяет освободить память, чтобы она стала доступной DOS.

Версии: DOS 3.30 и выше. DOS, функция 68h Завершить файл

BX – описатель завершаемого файла

CF=0, если функция выполнена успешно

CF=1, если при выполнении функции возникли ошибки

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

Версии: DOS 3.3 и выше. В версиях DOS от 2.0 до 3.2 можно использовать функцию DOS 45h, чтобы создать и затем закрыть дубликат.

Иллюстрированный самоучитель по задачам и примерам Assembler

Работа с файлами в MS DOS (имена 8.3). Создание, открытие, закрытие и удаление файла.

В основе файловой системы MS DOS лежит древовидная структура каталогов. Корень этой структуры представляет собой совокупность ограниченного числа дескрипторов, описывающих файлы и каталоги (подкаталоги) следующего уровня. Подкаталог представляет собой файл особого типа, который содержит дескрипторы файлов и подкаталогов очередного нижележащего уровня. В отличие от корневого каталога количество дескрипторов в подкаталоге не ограничено и определяется только размером диска. Дескриптор представляет собой экземпляр структуры размером 32 байта. Поля этой структуры содержат различную информацию о файле: идентификатор файла и его характеристики – дата и время создания (модификации), номер начального кластера, длина файла и его атрибуты.

Для использования файла в программе необходимо выполнить следующие операции:

  • создание нового файла;
  • открытие существующего файла;
  • запись/чтение в/из файл(а);
  • закрытие файла.

Операционная система MS DOS поддерживает эти операции с помощью набора функций прерывания 21h. Кроме этих функций данное прерывание содержит функции для работы с каталогами:

  • создать каталог;
  • удалить каталог;
  • сменить каталог.

Существует также ряд других функций для работы с файловой системой, в том числе для поиска файлов и получения информации о них.

Прежде чем использовать файл в программе, его необходимо открыть с помощью функции 3dh прерывания 21h. Если файл не существует, то перед открытием его нужно создать. Оба эти действия выполняются одной из следующих функций: 3ch, 5bh, 5ah, 6ch.

Создание файла с усечением существующего до нулевой длины

Открытие или создание файла с расширенными возможностями

Функция 6Ch появилась в последних версиях MS DOS (DOS 4.0+). С ее появлением устраняется необходимость отслеживать существование создаваемого файла. Для корректной работы достаточно задать нужные значения в соответствующих регистрах. Анализ возможных значений показывает, что данная функция фактически заменяет существовавшие до этого функции создания и открытия файлов.

Fuse для пользователей

Руководства в этой статье рассчитаны на версии с интерфейсами Win32 (для Windows) и GTK+ (для Linux и других Unix-like систем).

Содержание

Запуск программ

Загрузка с образа кассеты

Эмулятор поддерживает мгновенную загрузку с образов кассет в форматах tap и tzx.

  • После запуска эмулятора выберите пункт меню File -> Open или нажмите горячую клавишу F3.
  • В появившемся окне выберите файл с игрой и нажмите кнопку Открыть. После этого игра должна запуститься.

Примечание: в версии для ОС Windows можно увеличить размер окна, растянув его за нижний-правый угол.

Загрузка с образа диска

Также есть возможность загрузки с образов дисков в формате trd и scl. В этом случае будет немного посложней, поскольку придется запускать программу вручную.

  • Загрузите файл с диском (пункт меню File -> Open или клавиша F3).
  • Появится экран операционной системы TR-DOS. Нажмите клавиши K и Enter для ввода команда LIST. После этого вверху окна отобразится содержимое диска.
  • Файл для запуска игры должен иметь расширение B. Нажмите клавишу R для ввода команды RUN и ввведите имя файла в двойных кавычках (они ставятся комбинацией клавиш Ctrl+P). Обратите внимание, что система является регистрозависимой, то есть вы должны вводить имя файла именно так, как оно отображается на экране. Получившаяся команда должна выглядеть примерно так: RUN «FILE» (расширение файла писать не надо).
  • После нажатия Enter игра запустится.

Загрузка с образа диска (формат dsk)

Ниже представлена инструкция по запуску игр с дисков в формате dsk:

  • Откройте меню File -> Open или нажмите F3. В появившемся окне выберите файл с игрой.
  • Должно появиться загрузочное меню. Выберите в нем пункт Loader и нажмите Enter.

Горячие клавиши

Список основных комбинаций:

  • F2 — сохранить снапшот.
  • F3 — загрузить файл с образом кассеты.
  • F4 — открыть окно с настройками эмулятора.
  • F5 — перезагрузить эмулятор.
  • F9 — выбрать конфигурацию компьютера.
  • F10 — выйти из эмулятора.
  • F11 — переключение оконного и полноэкранного режимов (не работает в Windows).
  • Pause — включить или выключить паузу.
  • Esc — отключить эмуляцию мыши.

В конце работы файл следует закрыть.

4. Признаком ошибки при выполнении функции DOS является взведенный флаг С (переноса).

Количество одновременно открытых файлов (включая предопределенные файлы) не может превышать 20, хотя количество описателей может быть больше. Поскольку 5 первых описателей всегда открыто, то получается, что можно одновременно открыть не более 15 файлов.

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

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

При открытии выделяются буфера отдельно на чтение и запись. В MS DOS имеется функция 68Н, с помощью которой можно сбрасывать буфера, выделенные для записи, на диск, не закрывая файла. Эту функцию часто используют для того, чтобы обезопасить себя от возможной потери данных. Аналог ее имеется во всех языках высокого уровня.

DOS поддерживает как работу с длинными именами, так и с короткими именами файлов и каталогов.

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

Стандартным устройствам ввода-вывода по умолчанию присваиваются свои описатели — от 0 до 4. Вот эти описатели:

● STDIN стандартное устройство ввода (клавиатура) — 0,

● STDOUT стандартное устройство вывода (экран) -1,

● STDERR устройство для вывода ошибок (обычно экран) — 2,

● AUX асинхронный порт(СОМ1) — 3,

● PRN печатающее устройство (LPT1) — 4.

Это позволяет перенаправить ввод или вывод с одного устройства на другое.

Можно выделить четыре аспекта работы с файлами в программах на ассемблере:

– работа с системой файлового ввода-вывода MS DOS, использующей короткие имена;

– работа с системой файлового ввода-вывода MS DOS, использующей длинные имена (длиной до 255 символов);

– работа с системой файлового ввода-вывода Win 32;

– использование файлов особого вида, поддерживаемых Win 32 — проецированных на память.

Функция DOS 3Dh — Открыть существующий файл

Ввод: AH = 3Dh

AL = режим доступа

Биты 0-1: открыть для записи или для чтения

Чтение

Запись

Чтение и запись

Биты 2 – 3: зарезервированы (0)

Биты 6 – 4: режим доступа для других процессов

Режим совместимости (остальные процессы также должны открывать этот файл в режиме совместимости)

Все операции запрещены

Запись запрещена

Чтение запрещено

Запрещений нет

Бит 7: файл не наследуется порождаемыми процессами

DS:DX = адрес ASCIZ-строки с полным именем файла

CL = маска атрибутов файлов

Вывод:

CF = 0 и АХ = идентификатор файла, если не произошла ошибка.

CF = 1 и АХ = код ошибки (02h — файл не найден, 03h — путь не найден, 04h — слишком много открытых файлов, 05h — доступ запрещен, 0Ch — неправильный режим доступа)

LEA DX,PATH ; сегменте данных путь: С:\ПУТЬ\ИМЯФАЙЛА, 0;

; если краткое имя, то берется текущий каталог

MOV AL,2 ; открыть для чтения и записи, если 0 для чтения,

MOV АН,3DН ; функция открытия файла

INT 21H ; открываем файл

JC ERRO ; ошибка, если поднят флаг СF, в АХ код ошибки,

; если ошибки нет, то в АХ описатель файла для

; будущей работы следует его сохранить

При этом обязательно будет ошибка, если такого файла не существует (в указанном каталоге).

Создание файла с усечением существующего до нулевой длины.

Функция DOS 3Ch — Создать файл

Ввод:

Ah = 3Ch

СХ = атрибут файла

Бит 7: файл можно открывать разным процессам в Novell Netware

бит 6: не используется

бит 5: архивный бит (1, если файл не сохранялся)

бит 4: каталог (должен быть 0 для функции 3Ch)

бит 3: метка тома (игнорируется функцией 3Ch)

бит 2: системный файл

бит 1: скрытый файл

бит 0: файл только для чтения

DS:DX = адрес ASCIZ-строки с полным именем файла (ASCIZ-строка ASCII-символов, оканчивающаяся нулем).

CF = 0 и АХ = идентификатор файла, если не произошла ошибка

CF = 1 и АХ = 03h, если путь не найден

CF = 1 и АХ = 04h, если слишком много открытых файлов

CF = 1 и АХ = 05h, если доступ запрещен

Если файл уже существует, функция 3Ch все равно открывает его, присваивая ему нулевую длину. Чтобы этого не произошло, следует пользоваться функцией 5Bh.

Функция 5ВН создаёт файл, но если файл уже существует, содержимое его не уничтожается, а взводится флаг ошибки СF.

LEA DX,PATH ; в сегменте данных путь: С:\ПУТЬ\ИМЯФАЙЛА, 0

; если краткое имя, то берется текущий каталог

MOV СХ,0 ; создать только для чтения, если 0 — для чтения, 1 –

MOV АН,3СН ; функция создания файла

INT 21h ; открываем файл

JC ERRO ; ошибка, если поднят флаг СF, в АХ код ошибки,

; если ошибки нет, то в АХ описатель файла, для

; будущей работы следует его сохранить

Пример 10.1. Создание файла и запись в него строки ‘Файл номер 1’.

; В сегменте данных

bufout db ‘Файл номер 1’ ; Данные для записи в файл

buflen=$-bufout ; строка длиной в 12 байт

handle dw 0 ; Ячейка для дескриптора

fname db ‘MYFILE.txt’,0 ;Имя файла в формате ASCIIZ

;В сегменте команд создадим файл

mov АН,3Ch ; Функция создания файла

mov CX, 0 ; Без атрибутов

mov DX, offset fname ; Адрес имени файла

mov handle,AX ; Сохраним дескриптор файла

; Запишем в файл данные (в данном

; примере – текстовую строку)

mov AH,40h ; Функция записи в файл

mov BX,handle ; Дескриптор

mov CX,buflen ; Число записываемых байтов

mov DX,offset bufout ; Адрес данных

mov АН,3Eh ; Функция закрытия файла

mov BX,handle ; Дескриптор

Функция WinAPI для создания файла

HANDLE CreateFile(

CLPCTSTR lpFileName, (1)

DWORD dwDesiredAccess, (2)

DWORD dwShareMode, (3)

LPSECURITY_ATTRIBUTES IpSecurityAttributes, (4)

DWORD dwCreationDistribution, (5)

DWORD dwFlagsAndAttributes, (6)

HANDLE hTemplateFile); (7)

0) lpFileName — указатель на ASCIIZ-строку с именем (путем) открываемого или создаваемого файла;

1) dwDesiredAccess — тип доступа к файлу:

* GENERIC_READ = 80000000h — доступ для чтения;

* GENERIC_WRITE = 40000000h — доступ для записи;

* GENERIC_READ+GENERIC_WRITE = 0C0000000h — доступ для чтения-записи;

2) DwShareMode — режим разделения файлов между разными процессами, данный параметр может принимать значения:

* 0 — монополизация доступа к файлу;

* FILE_SHARE_READ = 00000001h — другие процессы могут открыть файл, но только для чтения, запись в файл монополизирована процессом, открывшим файл;

* FILE_SHARE_WRITE = 00000002h — другие процессы могут открыть файл, но только для записи, чтение в файл монополизировано процессом, открывшим файл;

* FILE_SHARE_READ+FILE_SHARE_WRITE = 00000003h — другие процессы могут открывать файл для чтения-записи;

3) IpSecurityAttributes — указатель на структуру SecurityAttributes, определяющую защиту связанного с файлом объекта ядра, при отсутствии защиты заносится NULL;

4) dwCreationDistribution — определяет действия для случаев, когда файл существует или не существует.Данный параметр может принимать значения:

* CREATE_NEW= 1 — создать новый файл, если файл не существует; если файл существует, то функция завершается формированием ошибки;

* CREATE_ALWAYS=2 — создать новый файл, если файл не существует; если он существует, то заменить новым;

* ОPEN_EXISTING=3 — открыть файл, если он существует; если файл не существует, то формируется ошибка;

* ОPEN_ALWAYS=4 — открыть файл при его существовании и создать его если файла нет;

* TRUNCATE_EXISTING=5 — открыть файл с усечением его до нулевой длины; если файл не существует, то формируется ошибка;

5) DwFlagsAndAttributes — флаги и атрибуты; этот параметр используется для задания характеристик создаваемого файла:

* FILE_ATTRIBUTE_READ0NLY=0000000lh — файл только для чтения;

* FILE_ATTRIBUTE_SYSTEM=00000004h — системный файл;

* FILE ATTRIBUTE ARCHIVE=00000020h — архивный файл;

* FILE_ATTRIBUTE_N0RMAL=00000080h — обычный файл для чтения-записи (этот атрибут нельзя комбинировать с другими);

* FILE_ATTRIBUTE_TEMPORARY=00000l00h — создается временный файл (преимущество этого файла в том, что система стремится не записывать этот файл на диск, а работать с ним в памяти; этот атрибут выгодно комбинировать с флагом FILE_FLAG_DELETE_ON_CLOSE, тогда после закрытия файла в программе он будет удален, не оставив следов на диске, иначе программе придется «подчищать» за собой содержимое диска);

* FILE_FLAG_WRITE_THRОUGH=80000000h — не использовать промежуточное кэширование при записи на диск, а все изменения записывать прямо на диск;

* FILE_FLAG_NO_BUFFERING=20000000h — не использовать средства буферизации операционной системы;

* FILE_FLAG_RANDOM_ACCESS=10000000h — прямой доступ к файлу (установка этого флага или флага FILE_FLAG_SEQUENTIAL_SCAN позволяет оптимизировать системе процесс кэширования);

* FILE_FLAG_SEQUENTIAL_SCAN=08000000h — последовательный доступ к файлу;

* FILE_FLAG_DELETE_0N_CL0SE=04000000h — удалить файл после его закрытия;

* FILE_FLAG_OVERLAPPED=40000000h — асинхронный доступ к файлу(синхронность означает то, что программа, вызвавшая функцию для доступа к файлу, приостанавливается до тех пор, пока не закончит работу функция ввода-вывода);

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

При удачном завершении функция возвращает в регистре ЕАХ дескриптор нового файла. В случае неудачи функция возвращает в регистре ЕАХ значение NULL.

Пример 1:

mov eax,offset filename

push 00000000h ; Создаём новый файл с новыми параметрами

push 00000080h ; создаём обычный файл для чтения-записи

push 00000003h ; открываем файл, если он существует; если файл

; не существует, то формируется ошибка;

push 00000000h ; нет защиты при создании файла

push 00000001h ; другие процессы могут открыть файл, но только

push 0C0000000h ; тип доступа к файлу — доступ для чтения-записи;

push fname ; путь к открываемому или создаваемому файлу;

filename db ‘data.txt’,0

Пример 2:

mov eax,offset filename

push 0h ; hTemplateFile = NULL

push 80h ; Attributes = NORMAL

push 3h ; Mode = OPEN_EXISTING

push 0h ; pSecurity = NULL

push 3h ; ShareMode = FILE_SHARE_RW

push 3h ; Access = READ

push fname ; ‘data.txt’

filename db ‘data.txt’,0

После выполнения функции в ЕАХ будет расположен хендл открытого файла. В случае ошибки ЕАХ будет равен FFFFFFFFh = -1. После вызова функции можно сохранить хендл файла в стек для дальнейшей работы.

Последнее изменение этой страницы: 2020-09-13; Нарушение авторского права страницы

Илон Маск рекомендует:  Что такое код asp ipdeny
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL