sigset, sighold, sigrelse, sigignore -
программный
интерфейс
сигналов System V
Standard C library (
libc,
-lc)
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t sigset(int sig, sighandler_t disp);
int sighold(int sig);
int sigrelse(int sig);
int sigignore(int sig);
sigset(),
sighold(),
sigrelse(),
sigignore():
_XOPEN_SOURCE >= 500
Данные
функции
предоставляются
glibc для
совместимости
с
программами,
в которых
используются
старый
программный
интерфейс
сигналов System V.
Данный
программный
интерфейс
устарел: в
новых
приложениях
нужно
использовать
программный
интерфейс
сигналов POSIX (
sigaction(2),
sigprocmask(2) и т.п.).
Функция
sigset()
изменяет
обработку
сигнала
sig. В
аргументе
disp может
быть
указан
адрес
функции
обработчика
сигнала
или одна из
следующих
констант:
- SIG_DFL
- Сбросить
обработку
sig в
значение
по
умолчанию.
- SIG_IGN
- Игнорировать
sig.
- SIG_HOLD
- Добавить
sig в маску
сигналов
процесса,
но
оставить
обработку
sig
неизменной.
Если в
disp
задан
адрес
обработчика
сигналов,
то при его
выполнении
sig
добавляется
в маску
сигналов
процесса.
Если в
disp
было
указано
значение
отличное
от
SIG_HOLD, то
sig
удаляется
из маски
сигналов
процесса.
Обработку
сигналов
SIGKILL и
SIGSTOP
невозможно
изменить.
Функция
sighold()
добавляет
sig в маску
сигналов
вызвавшего
процесса.
Функция
sigrelse()
удаляет
sig
из маски
сигналов
вызвавшего
процесса.
Функция
sigignore()
устанавливает
обработку
sig равной
SIG_IGN.
При
успешном
выполнении
sigset()
возвращает
SIG_HOLD, если
sig
был
заблокирован
до вызова,
или
предыдущий
обработчик
сигнала,
если
блокировки
не было. При
ошибке
sigset()
возвращает
-1, а
errno
записывает
номер
ошибки (но
смотрите
раздел
ДЕФЕКТЫ
далее).
При
успешном
выполнении
функции
sighold(),
sigrelse() и
sigignore()
возвращают
0; при ошибке
возвращается
-1, а в
errno —
номер
ошибки.
Для
функции
sigset()
смотрите
раздел
ОШИБКИ в
sigaction(2)
и
sigprocmask(2).
Для
функции
sighold()
и
sigrelse()
смотрите
раздел
ОШИБКИ в
sigprocmask(2).
Для
функции
sigignore()
смотрите
раздел
ОШИБКИ в
sigaction(2).
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
sigset(), sighold(), sigrelse(),
sigignore() |
Безвредность
в нитях |
MT-Safe |
Существует
в SVr4, POSIX.1-2001, POSIX.1-2008. Эти
функции
устарели:
не
используйте
их в новых
программах.
В POSIX.1-2008 функции
sighold(),
sigignore(),
sigpause(3),
sigrelse()
и
sigset()
помечены
как
устаревшие,
вместо них
рекомендуется
использовать
sigaction(2),
sigprocmask(2),
pthread_sigmask(3) и
sigsuspend(2).
These functions appeared in glibc 2.1.
Тип
sighandler_t
является
расширением
GNU; в этой
странице
он
используется
только для
более
понятного
описания
прототипа
sigset().
Функция
sigset()
предоставляет
семантику
надёжной
обработки
сигналов
(как при
вызове
sigaction(2) с
значением
sa_mask равным 0).
В System V, функция
signal()
предоставляет
ненадёжную
семантику
(как при
вызове
sigaction(2)
со
значением
sa_mask равным
SA_RESETHAND | SA_NODEFER). В BSD,
signal()
предоставляет
надёжную
семантику.
В POSIX.1-2001 эти
аспекты
signal()
не
определены.
Подробности
смотрите в
signal(2).
Для
ожидания
сигналов в BSD
и System V
предоставляется
функция
sigpause(3),
но в других
системах
она
описана с
другим
аргументом.
Подробности
смотрите в
sigpause(3).
Before glibc 2.2,
sigset() did not unblock
sig if
disp was
specified as a value other than
SIG_HOLD.
Before glibc 2.5,
sigset() does not correctly return the previous
disposition of the signal in two cases. First, if
disp is specified as
SIG_HOLD, then a successful
sigset() always returns
SIG_HOLD. Instead, it should return the previous disposition of the
signal (unless the signal was blocked, in which case
SIG_HOLD should be
returned). Second, if the signal is currently blocked, then the return value
of a successful
sigset() should be
SIG_HOLD. Instead, the
previous disposition of the signal is returned. These problems have been fixed
since glibc 2.5.
kill(2),
pause(2),
sigaction(2),
signal(2),
sigprocmask(2),
raise(3),
sigpause(3),
sigvec(3),
signal(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]