ВУЗ:
Составители:
28
Функция проверяет входит ли сигнал SIGNUM в набор сигналов SET.
Возвращает 1, если сигнал находится в наборе и 0 в противном случае, -1 – в случае
ошибки выполнения. При возникновении ошибки переменная errno может принимать
следующее значение:
EINVAL SIGNUM содержит неправильный номер сигнала.
Набор сигналов, который заблокирован в данный момент, называется “маской
сигналов”. Каждый процесс имеет свою собственную маску сигналов. При создании
нового процесса, он наследует маску сигналов родительского процесса. Для
модификации маски сигналов используется следующая функция:
int sigprocmask(int HOW, const sigset_t *SET,
sigset_t *OLDSET)
Аргумент HOW определяет каким образом изменяется маска сигналов и может
принимать следующие значения:
SIG_BLOCK сигналы, задаваемые в наборе, блокируются – добавляются к уже
существующей маске сигналов;
SIG_UNBLOCK сигналы, задаваемые в наборе, разблокируются – удаляются из
уже существующей маски сигналов процесса;
SIG_SETMASK устанавливает набор сигналов для процесса, старое содержимое
маски игнорируется.
Аргумент OLDSET используется для возврата старого содержимого маски
сигналов процесса.
Функция возвращает 0 в случае успеха и –1 в противном случае. При
возникновении ошибки переменная errno может принимать следующее значение:
EINVAL SIGNUM содержит неправильный номер сигнала.
Для проверки того, обработчики каких сигналов активны в настоящий момент
используется следующая функция:
int sigpending(sigset_t *SET)
Функция возвращает информацию об активных в текущий момент сигналах.
Если имеется заблокированный сигнал, поступивший процессу, то он также включается
в маску сигналов. Возвращает 0 в случае успешного выполнения и –1 в случае ошибки.
Пример проверки активных сигналов:
#include <signal.h>
#include <stddef.h>
sigset_t base_mask, waiting_mask;
sigemptyset (&base_mask);
sigaddset (&base_mask, SIGINT);
sigaddset (&base_mask, SIGTSTP);
/* Блокировка прерываний пользователя */
sigprocmask (SIG_SETMASK, &base_mask, NULL);
...
sigpending (&waiting_mask);
if (sigismember (&waiting_mask, SIGINT)) {
/* Попытка прекратить выполнение процесса */
}
else if (sigismember (&waiting_mask, SIGTSTP)) {
/* Попытка остановить выполнения процесса */
}
Функция проверяет входит ли сигнал SIGNUM в набор сигналов SET.
Возвращает 1, если сигнал находится в наборе и 0 в противном случае, -1 – в случае
ошибки выполнения. При возникновении ошибки переменная errno может принимать
следующее значение:
EINVAL SIGNUM содержит неправильный номер сигнала.
Набор сигналов, который заблокирован в данный момент, называется “маской
сигналов”. Каждый процесс имеет свою собственную маску сигналов. При создании
нового процесса, он наследует маску сигналов родительского процесса. Для
модификации маски сигналов используется следующая функция:
int sigprocmask(int HOW, const sigset_t *SET,
sigset_t *OLDSET)
Аргумент HOW определяет каким образом изменяется маска сигналов и может
принимать следующие значения:
SIG_BLOCK сигналы, задаваемые в наборе, блокируются – добавляются к уже
существующей маске сигналов;
SIG_UNBLOCK сигналы, задаваемые в наборе, разблокируются – удаляются из
уже существующей маски сигналов процесса;
SIG_SETMASK устанавливает набор сигналов для процесса, старое содержимое
маски игнорируется.
Аргумент OLDSET используется для возврата старого содержимого маски
сигналов процесса.
Функция возвращает 0 в случае успеха и –1 в противном случае. При
возникновении ошибки переменная errno может принимать следующее значение:
EINVAL SIGNUM содержит неправильный номер сигнала.
Для проверки того, обработчики каких сигналов активны в настоящий момент
используется следующая функция:
int sigpending(sigset_t *SET)
Функция возвращает информацию об активных в текущий момент сигналах.
Если имеется заблокированный сигнал, поступивший процессу, то он также включается
в маску сигналов. Возвращает 0 в случае успешного выполнения и –1 в случае ошибки.
Пример проверки активных сигналов:
#include
#include
sigset_t base_mask, waiting_mask;
sigemptyset (&base_mask);
sigaddset (&base_mask, SIGINT);
sigaddset (&base_mask, SIGTSTP);
/* Блокировка прерываний пользователя */
sigprocmask (SIG_SETMASK, &base_mask, NULL);
...
sigpending (&waiting_mask);
if (sigismember (&waiting_mask, SIGINT)) {
/* Попытка прекратить выполнение процесса */
}
else if (sigismember (&waiting_mask, SIGTSTP)) {
/* Попытка остановить выполнения процесса */
}
28
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
