Вызов независимых программ
(организация субпроцессов)
Если основная программа организует из своего тела вызовы некоторых .ехе файлов, то основная программа наз. процессом, а вызываемый .ехе файл – субпроцессом.
Память под субпроцесс выделяется в куче.
- Необходимо выделить память под стек, где будут храниться адреса возвратов процедур и функций , локальные переменные и др.
{$M 16384, 0,0} - Подключить модуль DOS/
Прoцедура этого модуля EXEC( <имя файла> ,параметры); организует запуск указанных файлов, <имя файла> ,параметры-строковые переменные или константы.- Запуск автономного компилятора из программы EXEC(’TPC.EXE’,’/L PROG.PAS’);, который откомпилирует программу PROG.PAS
- Вызов любого .ЕХЕ файла ЕХЕС(‘PROG.EXE’,’ ’);
- Если субпроцесс закончился неудачно, это не повлияет на работу основной программы, поэтому осуществляется контроль, прошел ли вызов субпроцесса, с помощью переменной DosError.
Если DosError=0 - вызов успешный, иначе коды ошибок в DosError. - Субпроцесс работает в своем DOS окружении. Перед вызовом субпроцесса необходимо запомнить исходное DOS окружение, а после вызова – восстановить исходное.
SwapVectors;
EXEC(……..);
SwapVectors;
Пример: Написать программу , которая корректирует файл PROG.PAS, компилирует его и запускает на выполнение.
{$M 16384, 0,0}
Uses DOS;
Var F: Text;
………………….
Begin
Assign (F, ‘PROG.PAS’);
<коррект. действия>
SwapVectors;
EXEC(’TPC.EXE’,’/L PROG.PAS’);
SwapVectors;
IF DosError <> 0 Then
<сообщение и выход>
ELSE Begin
SwapVectors;
ЕХЕС(‘PROG.EXE’,’ ’);
SwapVectors;
End;
……………………
End.