Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       sigvec, sigblock, sigsetmask, siggetmask, sigmask - программный интерфейс сигналов BSD

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <signal.h>

       [[deprecated]] int sigvec(int sig, const struct sigvec *vec,
                                 struct sigvec *ovec);

       [[deprecated]] int sigmask(int signum);

       [[deprecated]] int sigblock(int mask);
       [[deprecated]] int sigsetmask(int mask);
       [[deprecated]] int siggetmask(void);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       Все функции, показанные выше:
           Начиная с glibc 2.19:
               _DEFAULT_SOURCE
           В версии glibc 2.19 и более ранних:
               _BSD_SOURCE

ОПИСАНИЕ

       Данные  функции  предоставляются  glibc  для  совместимости  с программами, в которых используются старый
       программный интерфейс сигналов BSD. Данный программный  интерфейс  устарел:  в  новых  приложениях  нужно
       использовать программный интерфейс сигналов POSIX (sigaction(2), sigprocmask(2) и т.п.).

       Функция  sigvec()  назначает или возвращает обработчик сигнала sig (подобно POSIX sigaction(2)). Если vec
       не равно NULL, то это значение указывает на структуру sigvec, в которой определён  новый  обработчик  для
       sig.  Если  ovec  не  равно NULL, то это значение указывает на структуру sigvec, которая используется для
       возврата предыдущего обработчика sig. Чтобы получить текущий обработчик sig без  его  изменения,  укажите
       NULL в vec и не-null указатель в ovec.

       Обработку сигналов SIGKILL и SIGSTOP невозможно изменить.

       Структура sigvec описана следующим образом:

           struct sigvec {
               void (*sv_handler)(int); /* обработчик сигнала */
               int    sv_mask;          /* сигналы для блокировки в обработчике */
               int    sv_flags;         /* флаги */
           };

       В  поле  sv_handler  задаётся обработчик сигнала и это может быть: адрес функции сигнального обработчика;
       SIG_DFL, означающее, что к сигналу применяется обработчик по умолчанию; SIG_IGN, означающее,  что  сигнал
       игнорируется.

       Если  в  sv_handler  задан адрес обработчика сигнала, то в sv_mask задаётся маска сигналов, которые будут
       блокироваться на  время  выполнения  обработчика.  Также  блокируется  сигнал,  для  которого  вызывается
       обработчик. Попытка заблокировать SIGKILL или SIGSTOP просто игнорируется.

       Если в sv_handler задан адрес обработчика сигнала, то в поле sv_flags задаются флаги, контролирующие, что
       происходит при вызове обработчика. Это поле может содержать ноль или несколько следующих флагов:

       SV_INTERRUPT
              If  the  signal  handler  interrupts a blocking system call, then upon return from the handler the
              system call is not restarted: instead it fails  with  the  error  EINTR.   If  this  flag  is  not
              specified, then system calls are restarted by default.

       SV_RESETHAND
              Сбросить  обработку  сигнала  в значение по умолчанию перед вызовом обработчика сигнала. Если этот
              флаг не указан, то обработчик остаётся  установленным  до  его  явного  удаления  позднее  вызовом
              sigvec() или пока процесс не вызовет execve(2).

       SV_ONSTACK
              Обрабатывать  сигнал  в альтернативном стеке сигналов (исторически устанавливается в BSD с помощью
              устаревшей функции sigstack(); замена из POSIX — sigaltstack(2)).

       Макрос sigmask() создаёт и возвращает «сигнальную маску» для signum. Например, мы можем  инициализировать
       поле vec.sv_mask передаваемого в sigvec() с помощью такого кода:

           vec.sv_mask = sigmask(SIGQUIT) | sigmask(SIGABRT);
                       /* Блокировать SIGQUIT и SIGABRT при
                          выполнении обработчика */

       Функция   sigblock()   добавляет   сигналы   в   mask   в   сигнальную   маску  процесса  (подобно  POSIX
       sigprocmask(SIG_BLOCK)) и возвращает старую сигнальную маску процесса. Попытка  блокировать  SIGKILL  или
       SIGSTOP просто игнорируется.

       Функция  sigsetmask()  устанавливает  сигнальную  маску  процесса  равной  значению  mask  (подобно POSIX
       sigprocmask(SIG_SETMASK)) и возвращает старую сигнальную маску процесса.

       Функция siggetmask() возвращает текущую сигнальную маску процесса. Этот вызов эквивалентен sigblock(0).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении sigvec() возвращается 0; при ошибке возвращается -1, а  в  errno  содержится  код
       ошибки.

       Функции sigblock() и sigsetmask() возвращают предыдущую сигнальную маску процесса.

       Макрос sigmask() возвращает сигнальную маску для signum.

ОШИБКИ

       Смотрите раздел ОШИБКИ в sigaction(2) и sigprocmask(2).

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ sigvec(), sigmask(), sigblock(), sigsetmask(), siggetmask()         │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       Отсутствуют.

ИСТОРИЯ

       sigvec()
       sigblock()
       sigmask()
       sigsetmask()
              4.3BSD.

       siggetmask()
              Unclear origin.

       sigvec()
              Removed in glibc 2.21.

ПРИМЕЧАНИЯ

       В  4.3BSD,  функция  signal()  предоставляет  надёжную  семантику  (как  при вызове sigvec() со значением
       vec.sv_mask равным 0). В System V, signal() предоставляет ненадёжную семантику.  В  POSIX.1  эти  аспекты
       signal() не определены. Подробности смотрите в signal(2).

       Для  ожидания  сигналов  в  BSD  и System V предоставляется функция sigpause(3), но в других системах она
       описана с другим аргументом. Подробности смотрите в sigpause(3).

СМОТРИТЕ ТАКЖЕ

       kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), raise(3), sigpause(3), sigset(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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                        sigvec(3)