atexit – регистрация функции завершения работы
Синтаксис:
#include < stdlib.h >
int atexit (void (*func) (void));
Аргументы:
void (*func) (void) – указатель на функцию, которая будет выполнена при завершении работы программы.
Возвращаемое значение:
При успешном завершении функция возвращает 0, в противном случае - ненулевое значение.
Описание:
Функция atexit () регистрирует функцию, которая будет выполнена при нормальном завершении работы программы. Всего может быть зарегистрировано до 32 функций, которые будут выполнены при завершении работы в порядке обратном порядку регистрации. Также можно несколько раз зарегистрировать одну и ту же функцию. Она будет вызвана столько раз, сколько раз была зарегистрирована.
Пример:
В примере, при нормальном завершении работы программы, вызывается две функции: MyEnd_f () и MyEnd_s (). Причем функция MyEnd_f() вызывается первой и два раза, а функция MyEnd_s () вызывается последней.
#include < stdio.h > //Для printf () и puts ()
#include < unistd.h > //Для sleep ()
#include < stdlib.h > //Для atexit()
void MyEnd_f (void); //Декларация функций, которые будут
void MyEnd_s (void); //вызваны при нормальном завершении работы
int EndWorkTime = 1; //Декларация переменной, содержащей время работы
//функции MyEnd_f
int main (void)
{
int Pwork=0;
//Вывод сообщения о начале работы программы
puts (“Начало работы”);
//Регистрация функции, которая будет вызвана последней при
//нормальном завершении работы
Pwork = atexit (MyEnd_s) ;
//Проверка регистрации функции MyEnd_s
if (Pwork != 0)
{
puts (“Ошибка регистрации функции MyEnd_s ”);
}
//Регистрация функции, которая будет вызвана второй при
//нормальном завершении работы
Pwork = atexit (MyEnd_f);
//Проверка регистрации функции MyEnd_f
if (Pwork != 0)
{
puts (“Ошибка регистрации функции MyEnd_f ”);
}
//Регистрация функции, которая будет вызвана первой при
//нормальном завершении работы
Pwork = atexit (MyEnd_f);
//Проверка регистрации функции MyEnd_f
if (Pwork != 0)
{
puts (“Ошибка регистрации функции MyEnd_f ”);
}
//Нормальное завершение работы
return 0;
}
//Функция, вызываемая первые два раза при нормальном завершении работы
void MyEnd_f (void)
{
//Вывод сообщения о подготовке к завершению работы
printf (“Подготовка к завершению работы %d сек\n”,EndWorkTime);
//Увеличение счетчика времени работы функций
//завершения работы на 1 секунду
EndWorkTime++;
//Задержка на 1 секунду
sleep (1);
}
//Функция, вызываемая третей при нормальном завершении работы
void MyEnd_s (void)
{
//Вывод сообщения о завершении работы
puts (“Работа завершена”);
}
| |
Результат:
Начало работы
Подготовка к завершению работы 1 сек
Подготовка к завершению работы 2 сек
Работа завершена
|
Смотри так же:
_Exit,
_exit,
abort,
atexit,
exit
|