Пример использования функции strsignal() приведен в листинге 20.4 далее.
Функция psignal() выводит (в стандартное устройство вывода сообщений об ошибках) строку, соответствующую аргументу msg, добавляет двоеточие, а затем выводит описание сигнала sig. Как и функция strsignal(), функция psignal() чувствительна к локали.
#include
void psignal(int
Несмотря на то что функции psignal(), strsignal() и массив sys_siglist не прописаны в SUSv3, они тем не менее доступны во многих реализациях UNIX. (В SUSv4 были добавлены спецификации функций psignal() и strsignal().)
Многие системные вызовы, связанные с сигналами, должны быть в состоянии представлять группу различных сигналов. Например, sigaction() и sigprocmask() позволяют программе указать группу сигналов, которые должны быть заблокированы процессом, тогда как sigpending() возвращает группу сигналов, находящихся в настоящее время в режиме ожидания процесса. (Перечисленные системные вызовы будут описаны позже.)
Несколько сигналов описываются структурой данных под названием
В Linux, как и в большинстве других реализаций UNIX, тип данных sigset_t — это битовая маска. Однако стандарт SUSv3 этого не требует. Следовательно, набор сигналов может быть представлен структурой другого типа. Единственное, чего требует SUSv3, — чтобы тип данных был присваиваемым. Таким образом, он должен быть реализован через некий скалярный тип (например, целое число) или структуру С (возможно, содержащую массив целых чисел).
Функция sigemptyset() инициализирует набор сигналов, не содержащий членов. Функция sigfillset() инициализирует набор сигналов, содержащий все сигналы (в том числе все сигналы реального времени).
#include
int sigemptyset(sigset_t *
int sigfillset(sigset_t, *
Обе функции возвращают 0 при успешном завершении или –1 при ошибке
Для инициализации набора сигналов
После инициализации отдельные сигналы могут быть добавлены в набор с помощью функции sigaddset() и удалены — с помощью sigdelset().
#include
int sigaddset(sigset_t *
int sigdelset(sigset_t *
Обе функции возвращают 0 при успешном завершении или –1 при ошибке
Для обеих функций sigaddset() и sigdelset() аргумент sig — это номер сигнала.
Функция sigismember() проверяет, является ли данный сигнал членом набора.
#include
int sigismember(sigset_t *
Возвращает 1, если sig входит в набор set, 0 — если не входит, –1 при ошибке
Функция sigismember() возвращает 1 (истина), если sig является членом set, 0 (ложь), если не является, и –1 при ошибке (например, sig не является допустимым номером сигнала).
В GNU-библиотеке C реализованы три нестандартные функции, выполняющие задачи, которые дополняют стандартные функции наборов сигналов, описанные выше.
#define _GNU_SOURCE
#include
int sigandset(sigset_t *
int sigorset(sigset_t *
Обе функции возвращают 0 при успешном завершении или –1 при ошибке
int sigisemptyset(const sigset_t *
Возвращает 1 если set пуст, иначе — 0
Вышеприведенные функции выполняют следующие задачи:
• sigandset() — помещает пересечение наборов left и right в набор dest;
• sigorset() — помещает объединение наборов left и right в набор dest;
• sigisemptyset() — возвращает 1, если set не содержит сигналов, 0 в противном случае.
Используя функции, рассмотренные в этом разделе, мы можем написать функции, приведенные в листинге 20.4, которые будем применять далее в различных программах. Первая, printSigset(), отображает сигналы, являющиеся членами указанного набора. В этой функции задействуется константа NSIG, определенная в файле