2009-11-12 3 views
6

Предоставляет ли стандарт POSIX или другой стандарт C способ восстановления значимого сообщения из номера сигнала таким же образом, что strerror() позволяет восстановить сообщение от errno? Библиотека Gnu C имеет strsignal(), но, если возможно, мне хотелось бы что-то портативное для BSD и других Unix-вариантов.Как я могу получить удобочитаемое описание из номера сигнала?

ответ

10

Да, интересно, существует стандартный способ получения строкового сообщения из сигнала в POSIX. Это, совершенно случайно, strsignal(). От POSIX.1-2008:

Функция strsignal() должна отображать номер сигнала в signum в строку, определенную реализацией, и возвращает указатель на нее. Он должен использовать тот же набор сообщений, что и функция psignal().

Окружающая среда, которая не предоставляет вам эту функцию, не совместима с POSIX. Хотя относительно новый (выпуск 7 вышел в 2008 году), у меня есть справочная страница для strsignal() по адресу Mac OS X, так что это хороший знак.

+0

Спасибо: http://tinyurl.com/d4z9ev На странице руководства GNU, в которой говорится: «Эта функция не является частью какого-либо стандарта», очевидно, нуждается в обновлении. –

+0

@Norman: страница 'man' нуждается в обновлении? Ересь! Приветствия. –

2

Внешне определенный массив sys_siglist содержит описания сигналов для каждого номера сигнала и является стандартной проблемой для BSD.

#include <signal.h> 

extern const char *const sys_siglist[]; 
+0

+1 Нестандарт сам по себе, но полезный и наиболее часто встречающийся. – pilcrow

Смежные вопросы