На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 3 / Наследство и управление порожденной программой Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Наследство и управление порожденной программой

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


Из Рис. 3-13 можно видеть, что порождающий процесс применяет порожденный процесс с командной строкой, блоком среды (или с блоком порождающего процесса, если блок не указан в вызове EXEC) и блоками управления файлами. Кроме того, когда процесс загружается, он автоматически наследует большинство сегментов программого префикса своей программы, включая таблицу описателей файлов порождающей программы. При манипулировании этими элементами порождающая программа управляет тремя первичными элементами, управляющими программой: ее командной строкой, ее таблицей описателей файлов и ее блоком среды.


Между командными строками: передаваемой в порожденный процесс, и используемой в приглашениях системы имеются некоторые отличия. В первом случае командная строка становится ответственной порождающего процесса за установку любого переназначения - задачи, обычно обрабатываемой файлом COMMAND.COM. Т.к. порожденный процесс наследует таблицу описателей файлов порождающего его процесса, то порождающий процесс может легко переназначить ввод/вывод порожденного им процесса. При изменении значений описателей, хранящихся в устройствах стандартного ввода и вывода stdin и stdout порождающего процесса, порождающий процесс изменит предшествующие как stdin, stdout, так и любые другие допустимые устройства порожденного процесса. Порождающий процесс может изменить их, используя технические приемы, показанные в листинге 3-3 (в разделе "Таблица описателей файлов PSP"), или путем использования функций MS-DOS для манипулирования файлами и устройствами. (Одной из таких функций, которая может быть использована для замены обработки, является функция MS-DOS с кодом 46h "Использовать дубликат описателя"- прерывание int 21h).


Заметим, что полная обработка может быть включена из существа наследования. При открытии файла или устройства должен быть указан режим OPEN (открыть) (Смотри функцию MS-DOS с кодом 3Dh "Открыть файл или устройство" - прерывание int 21h), при этом бит 7 режима OPEN является битом наследования. При установке этого бита в 0 (принимается по умолчанию), обработка должна быть наследуемой с каким-либо порожденным процессом. Если этот бит установлен в 1 при вызове функции OPEN, то возвращаемая обработка будет освобождена от наследования.


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


Что же это означает для Вас? Это означает, что можно написать программу поиска блоков среды для отдельных элементов и затем использовать эти значения для установки параметров во время выполнения программы. Элементы могут быть вставлены в блок среды системы по команде SET (установить) для управления действиями программы, которая читает и действует со своим блоком среды. Так как порождающий процесс может изменять блок среды, то тем самым порождающий процесс может изменять поведение порожденного процесса, читающего этот блок.


Выполняющийся процесс может осуществлять доступ к своему блоку среды посредством указателя, хранящегося по смещению 2Сh в PSP. Указатель используется в качестве адреса сегмента с нулевым смещением, указывающим на начало блока. Если этот адрес передается в регистре внешнего сегмента или в регистре данных, то программа может выполнить поиск строки для нахождения требуемых параметров. При этом будьте осторожны, потому что можно потерять адрес PSP.


Информация, содержащаяся в PSP, действительна как для файлов типа .COM, так и для файлов типа .EXE, и любой тип файла может быть использован с функцией загрузки и выполнения программы.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz