Главная » 2017 » Ноябрь » 21 » man 2 rt_sigprocmask
01:35
man 2 rt_sigprocmask

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


sigprocmask, rt_sigprocmask - проверка и изменение блокировки сигналов



ОБЗОР


#include <signal.h>

/* Прототип обёрточной функции glibc */
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

/* Прототип используемого системного вызова */
int rt_sigprocmask(int how, const kernel_sigset_t *set,
kernel_sigset_t *oldset, size_t sigsetsize);

/* Прототип устаревшего системного вызова */
int sigprocmask(int how, const old_kernel_sigset_t *set,
old_kernel_sigset_t *oldset);

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

sigprocmask(): _POSIX_C_SOURCE



ОПИСАНИЕ


Вызов sigprocmask() используется для выборки и/или изменения маски сигналов
вызывающей нити. Маска сигналов представляет собой набор сигналов, чья доставка в
настоящее время заблокирована вызывающим (подробнее об этом смотрите также в
signal(7)).

Работа вызова зависит от значения how:

SIG_BLOCK
Набор блокируемых сигналов — объединение текущего набора и аргумента set.

SIG_UNBLOCK
Сигналы в set удаляются из списка блокируемых сигналов. Допускается
разблокировать незаблокированные сигналы.

SIG_SETMASK
Набор блокируемых сигналов приравнивается к аргументу set.

Если значение oldset не равно NULL, то предыдущее значение маски сигналов
записывается в oldset.

Если значение set равно NULL, то маска сигналов не изменяется (т.е., значение how
игнорируется), но текущее значение маски сигналов всё же возвращается в oldset
(если его значение не равно NULL).

Функции для изменения и получения переменных с типом sigset_t («наборы сигналов»)
описаны в sigsetops(3).

Использование sigprocmask() в многонитевых процессах не определено; смотрите
pthread_sigmask(3).



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


При успешном выполнении функция sigprocmask() возвращает 0 и -1 при ошибке. В
случае ошибки в errno указывается номер ошибки.



ОШИБКИ




ЗАМЕЧАНИЯ


Невозможно заблокировать SIGKILL или SIGSTOP. Попытка выполнить это просто
игнорируется.

Каждая нить процесса имеют свою маску сигналов.

Потомок, создаваемый с помощью fork(2), наследует копию родительской маски
сигналов; маска сигналов сохраняется при вызове execve(2).

Если генерируется сигнал SIGBUS, SIGFPE, SIGILL или SIGSEGV, а он заблокирован, то
результат не определён, если сигнал был сгенерирован не из kill(3), sigqueue(3)
или raise(3).

Подробная информация о работе с наборами сигналов есть на странице sigsetops(3).

Заметим, что разрешается (хотя не очень полезно) передавать в set и oldset
значение NULL.

Отличия между библиотекой C и ядром
Определение ядра sigset_t отличается по размеру от используемого в библиотеке C. В
данной справочной странице оно упоминается как kernel_sigset_t (хотя в исходном
коде ядра оно называется sigset_t).

Обёрточная функция glibc для sigprocmask() просто игнорирует попытки блокирования
двух сигналов реального времени, которые используются внутри реализации NPTL.
Подробности смотрите в nptl(7).

Изначально, системный вызов Linux назывался sigprocmask(). Однако из-за добавления
сигналов реального времени в Linux 2.2, 32-битный тип sigset_t (который называется
old_kernel_sigset_t в этой справочной странице) постоянного размера,
поддерживаемый этим системным вызовом, перестал подходить для этой цели. В связи с
этим был добавлен новый системный вызов rt_sigprocmask(), поддерживающий
увеличенный тип sigset_t (который называется kernel_sigset_t в этой справочной
странице). У нового системного вызова есть четвёртый аргумент, size_t sigsetsize,
которым задаётся размер набора сигналов (в байтах) в set и oldset. В настоящее
время этот аргумент должен задаваться постоянным определяемым архитектурой
значением (равен sizeof(kernel_sigset_t)).

Обёрточная функция glibc sigprocmask() скрывает эти детали от нас, вызывая
rt_sigprocmask(), если это необходимо ядру.



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


kill(2), pause(2), sigaction(2), signal(2), sigpending(2), sigsuspend(2),
pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 409 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar