[<<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 }