Завершення роботи програми

Завершення програми зазвичай включає в себе наступні дії системи:

· Закриваються всі файли, відкриті програмою.

· Звільняються всі блоки пам'яті, відведені для програми і її середовища.

· Відновлюються стандартні обробники описаних нижче переривань int 23h і int 24h, які могли бути змінені відпрацювала програмою.

· Управління передається батьківської програмі.

У MS-DOS визначено 4 можливі причини, які можуть викликати завершення роботи програми.

· Нормальне завершення. Воно відбувається, коли програма викликає системну функцію Terminate. В якості аргументу цієї функції програма передає код завершення - число, уточнююче причину завершення. Зазвичай код завершення 0 означає, що програма пропрацювала благополучно, а ненульові значення вказують на різні неприємності (відсутність файлу для обробки, невірний формат даних і т.п.).

· Завершення по запиту користувача. Воно відбувається, якщо користувач натискає одну з комбінацій клавіш Ctrl + C або Ctrl + Break. Система не поспішає припиняти роботу програми, поки не викличе програмне переривання int 23h. В залежності від результату, що повертається обробником цього переривання, програма або буде завершена, або продовжить роботу. За замовчуванням система сама обробляє переривання і сама собі відповідає: «Завершити програму». Однак програма може взяти обробку переривання на себе і відповісти системі: «Продовжуємо працювати». Так зазвичай і чинять усі серйозні програми MS-DOS.

· Завершення по критичну помилку. Критичною вважається помилка, яка сталася в ході виконання якої-небудь системної функції MS-DOS і має апаратний характер (точніше, виявлена ​​драйвером пристрою). Наприклад, відсутність файлу не є критичною помилкою, а помилка читання з диска - є. Система викликає програмне переривання int 24h, передаючи як аргументи докладний опис помилки (на якому пристрої, при якій операції і т.п.). У відповідь система хоче отримати від обробника вказівку, як реагувати на помилку. Є 4 види реакції: Ignore - ігнорувати помилку; Retry - повторно виконати операцію, що викликала помилку; Abort - завершити програму; Fail - повернути код помилки програмі користувача. Системний обробник переривання запитує необхідну реакцію у користувача. Однак програма і в даному випадку може взяти обробку переривання на себе і спробувати автоматично вибрати бажану реакцію на підставі опису помилки.

· Завершення з установкою резидента. Воно схоже на нормальне завершення, але відрізняється двома важливими особливостями. По-перше, файли, відкриті програмою, не закриваються. По-друге, системі повертається не вся пам'ять, займана завершилася програмою. Деяка частина пам'яті залишається прихованою від системи і може бути використана для розміщення резидентних програм, описаних у наступному пункті.

Є системна функція, за допомогою якої батьківська програма може перевірити причину і код завершення програми-нащадка.