Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 9
з курсу „ Системне програмування ”
Тема: Управління процесами.
Організація дочірніх процесів. Частина 2.
Львів – 2004
Мета роботи: Дослідити механізм виконання команд MS-DOS в якості дочірніх процесів з під управління прикладних програм.
Короткі теоретичні відомості
Важливим випадком активізації дочірнього процесу є виклик з ініціалізуючої програми другої копії командного процесора COMMAND.COM. Це дає можливість виконувати, не перериваючи активної програми, будь-які команди DOS, наприклад, копіювання файлів та ін. В багатьох випадках така методика суттєво спрощує програмування і розширює можливості прикладних програм.
Для виклику за допомогою функції Exec командного процесора слід вказати повну специфікацію його файлу, яка зазвичай видобувається із оточення активного процесу, хоча може бути задана безпосередньо в полях даних програми.
При передачі командному процесору імені програми (в якості залишку командного рядка) воно повинно починатись ключем “/C”. Залишок команди може в цьому випадку бути таким:
cmdtaіl db 10,‘ /C DІR C:’, 0Dh
В наведеному вище прикладі після завантаження другої копії командного процесора автоматично виконується команда DOS “DІR C:”. Таким самим чином можна виконати будь-яку іншу команду DOS або іншу прикладну програму.
Можна виділити два варіанти процедури активації другої копії командного процесора:
1. Командний процесор викликається з ключем “/C” і вказуванням конкретної програми (команди DOS). Отримавши управління, командний процесор активує потрібну програму. Після її завершення управління відразу передається ініціалізуючому процесу. Таким способом можна запускати не лише команди DOS, а й командні файли, які не можна активувати безпосередньо функцією Exec.
2. Командний процесор викликається без ключа “DІR C:” і без імені конкретної команди. В цьому випадку командний процесор, отримавши управління, очікує вводу команд DOS з клавіатури. Користувач може необмежений час працювати з DOS, викликаючи будь-які команди DOS або прикладні програми. Для повернення в ініціалізуючий процес слід ввести команду EXІT. Такий режим (тимчасового виходу в DOS) широко використовується в більшості прикладних програм.
DOS дозволяє дочірньому процесу передати у ініціалізуючий процес, що викликав його, код завершення із значенням в діапазоні 0-255. Як правило, 0 використовується в якості коду успішного завершення, інші значення – характеризують різні помилкові ситуації.
Завдання на лабораторну роботу
Створити програму, що запускає дочірній процес та аналізує результат виконання по його завершенні. В якості програми дочірнього процесу використати командний процесор COMMAND.COM.
Запуск дочірнього процесу здійснити двома способами:
проста ініціалізація другої копії командного процесора;
ініціалізація другої копії командного процесора з передачею йому в якості вхідного параметру команди MS-DOS згідно варіанту вказаного викладачем.
Варіант 9.
Знайти всi файли, що мають розширення TXT, результати вiдсортувати i вивести на екран
Вміст .asm-файлу
.model small
.stack 64
.data
parameters dw 0
dd cmds
dd fcb1
dd fcb2
progname db 'COMMAND.COM', 0
cmds db 21,' /C DIR *.TXT /A /O:N',13 ; COUNTER,'...',13,0
fcb1 db 37 dup (0)
fcb2 db 37 dup (0)
ermsg1 db 'ERROR!$'
ermsg2 db 'File not found or not enough memory!',10,13,'$'
.code
main PROC FAR
mov ah, 4ah
mov bx, stack
add bx, 4
int 21h
jc err1
mov ax, @data
mov ds, ax
mov es, ax
mov ah, 4Bh
mov al, 0
lea bx, parameters
lea dx, progname
int 21h
jc err2
mov al, 00
jmp BUXIT
err1:
mov al, 01
mov dx,OFFSET ermsg1
mov ah,09
int 21h
jmp BUXIT
err2:
mov dx,OFFSET ermsg2
mov ah,09
int 21h
mov al, 02
BUXIT:
mov ah, 4ch
int 21h
main ENDP
end main
Результат виконання програми
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.
Volume in drive C is SYSTEM
Volume Serial Number is 263A-1EEA
Directory of С:\TEMP\9
L9 TXT 543 12-18-04 6:37p
SAMPLE TXT 543 12-18-04 6:37p
2 file(s) 1086 bytes
434230272 bytes free
Висновок: Виконуючи дану лабораторну роботу, я дослідив механізм виконання команд MS-DOS в якості дочірніх процесів з-під управління прикладних програм.