[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Подпрограмма, вызываемая при завершении - Пример

Этот пример иллюстрирует использование библиотечной функции
atexit(3C).
13   Библиотечная функция atexit(3C) вызывается, чтобы
зарегистрировать функцию finish для исполнения при выходе из
программы.
20-27     Родительский процесс ожидает завершения своих потомков.
28   Родитель завершается системным вызовом exit(2). При этом
вызывается функция finish.
31-35     Функция finish. Она автоматически вызывается при завершении
программы.
Файл: atexit.c
           ПОДПРОГРАММА, ВЫЗЫВАЕМАЯ ПРИ ЗАВЕРШЕНИИ - ПРИМЕР

 1 #include <sys/types.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <wait.h>
 5 #include <stdio.h>
 6 static void finish(void);
 7
 8 main()
 9 {
10     pid_t child1, child2, pid;
11         int status;
12
13     atexit(finish);
14         if ((child1 = fork()) == 0)
15         execl("/bin/date", "date", (char *) 0);
16     if ((child2 = fork()) == 0)
17                 execl("/bin/date", "date", "-x", (char *) 0);
18
19     printf("parent: waiting for children\n");
20         while ((pid = wait(&status)) != -1) {
21         if (child1 == pid)
22             printf("parent: first child: %d\n",
23                 WEXITSTATUS(status));
24         else if (child2 == pid)
25             printf("parent: second child: %d\n",
26                 WEXITSTATUS(status));
27     }
28         exit(0);
29 }
30
31 static void finish(void)
32 {
33     /* additional processing */
34         printf("parent: all children terminated\n");
35 }