Главная    Разработка ПО    функции языка Си

Описание функций языка Си

" A "

abort 

abs, labs, llabs 

acos, acosf, acosl 

acosh, acoshf, acoshl 

alarm 

asin, asinf, asinl 

asinh, asinhf, asinhl 

asctime 

asctime_r 

assert 

atan, atanf,atanl 

atan2, atan2f, atan2l 

atanh, atanhf, atanhl 

atexit 

atoi 

atol 

atof 

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

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


Яндекс.Метрика

Рейтинг@Mail.ru