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 — номер ошибки.
Описание терминов данного раздела смотрите в attributes(7).
| Интерфейс | Атрибут | Значение |
| sigset(), sighold(), sigrelse(), sigignore() | Безвредность в нитях | MT-Safe |
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.
Русский перевод этой страницы руководства был сделан Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.