Книга: Разработка приложений в среде Linux. Второе издание
12.3.1. Описание сигналов
12.3.1. Описание сигналов
Иногда приложения нуждаются в описании сигнала для отображения пользователю или помещения в журнал. Существуют три способа сделать это (см. главу 9). К сожалению, ни один из них не стандартизован.
Самый старый метод предусматривает применение sys_siglist
— массива строк, описывающих каждый сигнал, проиндексированного номерами самих сигналов. Он включает описания всех сигналов за исключением сигналов реального времени. Применение sys_siglist
более переносимо, чем прочие методы, описанные ниже. В системах BSD предусмотрена функция psignal()
, которая является сокращенным способом отображения сообщений. Вот как выглядит версия psignal()
.
#include <signal.h>
#include <stdio.h>
void psignal(int signum, const char *msg) {
printf("%s: %sn", msg, sys_siglist[signum]);
}
Следует отметить, что эта функция использует тот же список сигналов, что и sys_siglist
, поэтому сигналы реального времени также исключаются.
Библиотека GNU С, используемая Linux, предлагает еще один метод — strsignal()
. Эта функция не входит ни в какой стандарт, поэтому для доступа к файлу прототипа нужно определить _GNU_SOURCE
.
#define _GNU_SOURCE
#include <signal.h>
char *strsignal(int signum);
Подобно sys_siglist
, strsignal()
также представляет описание сигнала по номеру signum
. Он использует sys_siglist
для большинства сигналов и конструирует описания для сигналов реального времени. Например, SIGRTMIN + 5
будет описан как "Real-time signal 5". Пример использования strsignal()
можно найти в строках 639–648 и 717 файла ladsh4.с
, приведенного в приложении Б.
- 7.1.1. Описание проекта
- Общее описание
- Описание пакета
- Описание языка описания компонентов
- 7.4. Аналоговые перемножители сигналов
- 15.1.3. Обработка сигналов управления заданиями
- Описание работы МП
- Описание разъемов МП
- Описание программы настройки BIOS
- Описание работы ЦПУ
- Описание типов модулей оперативной памяти
- Описание работы накопителя на жестком магнитном диске