ВУЗ:
Составители:
23
if (signal(SIGTERM, termination_handler) == SIG_IGN)
signal(SIGTERM, SIG_IGN);
. . .
}
Функция sigaction имеет то же назначение, что и signal, однако предоставляет
больший контроль над процессом обработки сигналов. Функция определена в
заголовочном файле <signal.h>.
int sigaction(int SIGNUM, const struct sigaction *ACTION,
struct sigaction *OLD_ACTION)
Структура sigaction определяется следующим образом:
struct sigaction {
int sa_flags;
sighandler_t sa_handler;
sigset_t sa_mask;
};
sa_handler используется таким же образом, как и аргумент ACTION в функции
signal; sa_mask задает список сигналов, которые должны быть заблокированы при
выполнении обработчика; sa_flags задает значения флагов, которые влияют на
поведение сигнала.
Аргумент ACTION задает новый обработчик для сигнала, OLD_ACTION
используется для того, чтобы возвратить информацию об обработчике,
ассоциированном с сигналом. Если OLD_ACTION является нулевым указателям,
информация о предыдущем обработчике не возвращается. Если ACTION является
нулевым указателем, обработчик сигнала не изменяется.
Функция возвращает следующие значения:
0 в случае успеха;
-1 в случае ошибки;
EINVAL в случае неправильно заданного идентификатора сигнала.
Пример использования функции sigaction:
#include <signal.h>
void
termination_handler (int signum)
{
struct temp_file *p;
for (p = temp_file_list; p; p = p->next)
unlink (p->name);
}
int
main (void)
{
...
struct sigaction new_action, old_action;
new_action.sa_handler = termination_handler;
sigemptyset (&new_action.sa_mask);
new_action.sa_flags = 0;
sigaction (SIGINT, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN)
sigaction (SIGINT, &new_action, NULL);
sigaction (SIGHUP, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN)
sigaction (SIGHUP, &new_action, NULL);
sigaction (SIGTERM, NULL, &old_action);
if (signal(SIGTERM, termination_handler) == SIG_IGN)
signal(SIGTERM, SIG_IGN);
. . .
}
Функция sigaction имеет то же назначение, что и signal, однако предоставляет
больший контроль над процессом обработки сигналов. Функция определена в
заголовочном файле .
int sigaction(int SIGNUM, const struct sigaction *ACTION,
struct sigaction *OLD_ACTION)
Структура sigaction определяется следующим образом:
struct sigaction {
int sa_flags;
sighandler_t sa_handler;
sigset_t sa_mask;
};
sa_handler используется таким же образом, как и аргумент ACTION в функции
signal; sa_mask задает список сигналов, которые должны быть заблокированы при
выполнении обработчика; sa_flags задает значения флагов, которые влияют на
поведение сигнала.
Аргумент ACTION задает новый обработчик для сигнала, OLD_ACTION
используется для того, чтобы возвратить информацию об обработчике,
ассоциированном с сигналом. Если OLD_ACTION является нулевым указателям,
информация о предыдущем обработчике не возвращается. Если ACTION является
нулевым указателем, обработчик сигнала не изменяется.
Функция возвращает следующие значения:
0 в случае успеха;
-1 в случае ошибки;
EINVAL в случае неправильно заданного идентификатора сигнала.
Пример использования функции sigaction:
#include
void
termination_handler (int signum)
{
struct temp_file *p;
for (p = temp_file_list; p; p = p->next)
unlink (p->name);
}
int
main (void)
{
...
struct sigaction new_action, old_action;
new_action.sa_handler = termination_handler;
sigemptyset (&new_action.sa_mask);
new_action.sa_flags = 0;
sigaction (SIGINT, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN)
sigaction (SIGINT, &new_action, NULL);
sigaction (SIGHUP, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN)
sigaction (SIGHUP, &new_action, NULL);
sigaction (SIGTERM, NULL, &old_action);
23
Страницы
- « первая
- ‹ предыдущая
- …
- 21
- 22
- 23
- 24
- 25
- …
- следующая ›
- последняя »
