10.6.2. Наборы сигналов: sigset_t и связанные функции

10.6.2. Наборы сигналов: sigset_t и связанные функции

Маска сигналов процесса является списком сигналов, которые процесс в настоящее время заблокировал. Сила POSIX API в том, что маской сигналов процесса можно манипулировать атомарно, как единым целым.

Маска сигналов процесса программно представляется с помощью набора сигналов. Это тип sigset_t. Концептуально он представляет собой просто битовую маску, причем значения 0 и 1 представляют отсутствие или наличие определенного сигнала в маске.

/* Непосредственное манипулирование маской сигналов. НЕ ДЕЛАЙТЕ ЭТОГО! */

int mask = (1 << SIGHUP) | (1 << SIGINT);

 /* битовая маска для SIGHUP и SIGINT */

Однако, поскольку в системе может быть больше сигналов, чем может содержаться в одной int или long и поскольку интенсивное использование побитовых операций тяжело для восприятия, для управления наборами сигналов существует несколько функций API.

#include <signal.h> /* POSIX */

int sigemptyset(sigset_t *set);

int sigfillset(sigset_t *set);

int sigaddset(sigset_t *set, int signum);

int sigdelset(sigset_t *set, int signum);

int sigismember(const sigset_t *set, int signum);

Эти функции следующие:

int sigemptyset(sigset_t *set)

Освобождает набор сигналов. По возвращении *set не содержит сигналов. Возвращает 0 в случае успеха и -1 при ошибке.

int sigfillset(sigset_t *set)

Полностью заполняет набор сигналов. По возвращении *set содержит все сигналы, определенные системой. Возвращает 0 в случае успеха и -1 при ошибке.

int sigaddset(sigset_t *set, int signum)

Добавляет signum к маске сигналов процесса в *set. Возвращает 0 в случае успеха и -1 при ошибке.

int sigdelset(sigset_t *set, int signum)

Удаляет signum из маски сигналов процесса в *set. Возвращает 0 в случае успеха и -1 при ошибке.

int sigismember(const sigset_t *set, int signum)

Возвращает true/false, если signum присутствует или не присутствует в *set.

Перед выполнением с переменной sigset_t каких-то действий всегда следует вызывать одну из функций sigemptyset() или sigfillset(). Существуют оба интерфейса, поскольку иногда бывает нужно начать с пустого набора и работать потом лишь с одним или двумя сигналами, а в другое время бывает нужно работать со всеми сигналами, возможно, убирая один или два сигнала.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Наборы утилит

Из книги 300 лучших программ на все случаи жизни автора Леонтьев Виталий Петрович

Наборы утилит IP-ToolsСайт: http://ks-soft.net/ip-tools.rus/Размер: 1,1 МбСтатус: SharewareЦена: $9Увы, господа новички, на этот раз подарочек предназначается не вам, а серьезным и продвинутым пользователям Сети. Именно для них и создан этот удобный набор, включающий аж целых 15 незаменимых для


10.10.2. Западноевропейские наборы символов

Из книги MySQL: руководство профессионала автора Паутов Алексей В

10.10.2. Западноевропейские наборы символов Западноевропейские наборы символов покрывают большинство западноевропейских языков, типа French, Spanish, Catalan, Basque, Portuguese, Italian, Albanian, Dutch, German, Danish, Swedish, Norwegian, Finnish, Faroese, Icelandic, Irish, Scottish и English.Объединения ascii (US ASCII):ascii_bin ascii_general_ci (значение по


10.10.5. Балтийские наборы символов

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

10.10.5. Балтийские наборы символов Балтийские наборы символов охватывают Estonian, Latvian и Lithuanian.Объединения cp1257 (Windows Baltic):cp1257_bin cp1257_general_ci (значение по умолчанию) cp1257_lithuanian_ciОбъединения latin7 (ISO 8859-13 Baltic):latin7_bin latin7_estonian_cs latin7_general_ci (значение по умолчанию)


10.10.6. Наборы символов кириллицы

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

10.10.6. Наборы символов кириллицы Наборы символов и объединения кириллицы для использования с Belarusian, Bulgarian, Russian и Ukrainian.Объединения cp1251 (Windows Cyrillic):cp1251_bin cp1251_bulgarian_ci cp1251_general_ci (значение по умолчанию) cp1251_general_cs cp1251_ukrainian_ciОбъединения cp866 (DOS Russian): cp866_bin cp866_general_ci (значение по


10.10.7. Азиатские наборы символов

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

10.10.7. Азиатские наборы символов Азиатские наборы символов, которые поддерживает пакет, включают Chinese, Japanese, Korean и Thai. Они могут быть усложнены. Например, китайские наборы должны учесть тысячи различных символов.Объединения big5 (Big5 Traditional Chinese):big5_bin big5_chinese_ci (значение по


12.2.2. Использование sigset_t

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

12.2.2. Использование sigset_t Большинство функций сигналов POSIX принимают набор сигналов в качестве одного из своих параметров (или части одного из параметров). Тип данных sigset_t служит для представления набора сигналов и определен в <signal.h>. POSIX определяет пять функций для


Специальные наборы символов

Из книги автора

Специальные наборы символов Основное правило для наборов символов то, что каждый байт (пара или тройка байтов в случае многобайтовых наборов) специально определен по стандарту его реализации. Существует четыре особых исключения - NONE, OCTETS, ASCII и UNICODE FSS. В табл. 11.1 показаны


Наборы данных

Из книги автора

Наборы данных Запрос DML определяет логическую совокупность элементов данных, упорядоченных слева направо, из одного или более столбцов, называемую набором. Запрос может ограничивать спецификацию набора одной строкой или же набор может состоять из множества строк. В


Наборы курсора

Из книги автора

Наборы курсора Оператор SELECT может объявлять набор, который вовсе не является выходным для клиента, но остается на сервере, чтобы работать как курсор на стороне сервера. Сам курсор является указателем; приложение дает ему указание по запросу читать по порядку строки одну


Наборы, совместимые для объединения

Из книги автора

Наборы, совместимые для объединения Для каждой операции SELECT, создающей входной поток для UNION, спецификация должна содержать список столбцов, одинаковый для всех других операций (количество и порядок столбцов) с соответствующими типами данных. Предположим, мы имеем


3.8. Функция sock_ntop и связанные с ней функции

Из книги автора

3.8. Функция sock_ntop и связанные с ней функции Основная проблема, связанная с функцией inet_ntop, состоит в том, что вызывающий процесс должен передать ей указатель на двоичный адрес. Этот адрес обычно содержится в структуре адреса сокета, поэтому вызывающему процессу необходимо