table of contents
sigset(3) | Library Functions Manual | sigset(3) |
ИМЯ¶
sigset, sighold, sigrelse, sigignore - программный интерфейс сигналов System V
LIBRARY¶
Standard C library (libc, -lc)
СИНТАКСИС¶
#include <signal.h>
typedef void (*sighandler_t)(int);
[[deprecated]] sighandler_t sigset(int sig, sighandler_t disp);
[[deprecated]] int sighold(int sig); [[deprecated]] int sigrelse(int sig); [[deprecated]] 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 |
СТАНДАРТЫ¶
POSIX.1-2008.
- sighandler_t
- GNU. POSIX.1 uses the same type but without a typedef.
ИСТОРИЯ¶
glibc 2.1. SVr4, POSIX.1-2001. POSIX.1-2008 marks these functions as obsolete, recommending the use of sigaction(2), sigprocmask(2), pthread_sigmask(3), and sigsuspend(2) instead.
ПРИМЕЧАНИЯ¶
Функция 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 <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 (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.
2 мая 2024 г. | Linux man-pages (unreleased) |