Функции С и C++, библиотек C++Builder, API Windows________________871

Комментарии

Функция atexit регистрирует в системе функцию окончания. Эта функция бу-
дет вызываться при завершении работы программы функциями exit и _cexit.
Обычно в этой функции предусматривается «зачистка мусора» — освобождение
динамически распределенной памяти, уничтожение временных файлов, разрыв
соединений с базами данных и т.п. Например, оператор

atexit(Exiti) ;

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

void Exiti(void)
{

)

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

Семейство функций exit выполняет операции по завершению работы прило-
жения. Наиболее полное завершение выполняет функция exit. Прежде, чем завер-
шить приложение, она закрывает все открытые файлы, сбрасывает выходные бу-
феры в соответствующие потоки, вызывает все зарегистрированные функцией ate-
xit функции окончания. Параметр status функции exit — это устанавливаемый
код завершения.

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

Функция	Закрытие файлов	Сброс буферов	Вызов функций окончания	Завершение приложения
exit	+	+	+	+
exit	.	.	.	+
cexit	+	+	+	,
с exit	+	+	-	-

Функция signal указывает обработчик func сигнала, переданного в нее пара-
метром sig. Сигнал — это некоторое непредвиденное событие (прерывание), кото-
рое может вызвать преждевременное завершение программы. Его основное отли-
чие от исключения в том, что после генерации сигнала можно вернуться в ту точку
кода, в которой был сгенерирован сигнал. В случае исключения это невозможно.
Сигналы могут поступать от внешних устройств, генерироваться в результате не-
которых аварийных ситуаций или преднамеренно генерироваться функцией raise.
Подробнее описание работы с сигналами см. в главе 11 в разделе 11.10.

В файле signal.h предопределены следующие сигналы:

SIGABRT   Аварийное завершение программы. Генерируется только вызовом
функций abort, raise и необработанными исключениями. Дейст-
вие по умолчанию — вызов _exit(3)

SIGFPE    Ошибка арифметической операции, например, деления на нуль
или операции, вызвавшей переполнение. Действие по умолчанию
— вызов _exit(l)

SIGILL     Появление в коде недопустимой команды. Действие по умолча-
нию — вызов _exit(l)