ВУЗ:
Составители:
22
количества строк и столбцов терминального окна.
Сообщения сигналов
За каждым сигналом закреплено определенное текстовое сообщение,
описывающее причину его возникновения. Для получения этого сообщения в Linux
предусмотрены следущие функции:
char * strsignal(int SIGNUM)
Возвращает указатель на статически размещенную строку, описывающую
сигнал SIGNUM.
void psignal(int SIGNUM, char *MESSAGE)
Печатает текстовое сообщение в стандартный поток вывода. ‘stderr’. Если
MESSAGE не является нулевым указателем, функция предваряет сообщение
содержимым этой строки.
Обе функции определены в заголовочном файле <signal.h>.
Определение обработчика сигнала
Наиболее простым способом определить обработчик сигнала является
использование функции signal. Ее определение находится в заголовочном файле
<signal.h>.
sighandler_t signal(int SIGNUM, sighandler_t ACTION)
sighandler_t – тип функций обработки сигналов (используется только в Linux).
Таким образом, можно определить обработчик следующим образом:
void HANDLER (int signum) {. . .}
Аргумент SIGNUM определяет сигнал, который будет обрабатываться. Сигнал
необходимо указывать в виде символьного обозначения, так как соответствующие
числовые идентификаторы могут различаться в различных операционных системах.
Аргумент ACTION указывает на действие, которое будет выполняться при появлении
сигнала. Аргумент может принимать следующие значения:
SIG_DFL Действие по умолчанию.
SIG_IGN Сигнал игнорируется.
HANDLER Определяет адрес функции-обработчика.
Функция signal возвращает то действие, которое использовалось для заданного
сигнала до выполнения функции. При возникновении ошибки возвращается значение
SIG_ERR, при задании неправильного идентификатора сигнала возвращаемое значение
равно EINVAL.
Пример использования обработчика сигналов для удаления временных файлов
при фатальных ошибках:
#include <signal.h>
void termination_handler(int signum)
{
struct temp_file *p;
for (p = temp_file_list; p; p = p->next())
unlink(p->name);
}
int main(void)
{
. . .
if (signal(SIGINT, termination_handler) == SIG_IGN)
signal(SIGINT, SIG_IGN);
if (signal(SIGHUP, termination_handler) == SIG_IGN)
signal(SIGINT, SIG_IGN);
количества строк и столбцов терминального окна.
Сообщения сигналов
За каждым сигналом закреплено определенное текстовое сообщение,
описывающее причину его возникновения. Для получения этого сообщения в Linux
предусмотрены следущие функции:
char * strsignal(int SIGNUM)
Возвращает указатель на статически размещенную строку, описывающую
сигнал SIGNUM.
void psignal(int SIGNUM, char *MESSAGE)
Печатает текстовое сообщение в стандартный поток вывода. ‘stderr’. Если
MESSAGE не является нулевым указателем, функция предваряет сообщение
содержимым этой строки.
Обе функции определены в заголовочном файле .
Определение обработчика сигнала
Наиболее простым способом определить обработчик сигнала является
использование функции signal. Ее определение находится в заголовочном файле
.
sighandler_t signal(int SIGNUM, sighandler_t ACTION)
sighandler_t – тип функций обработки сигналов (используется только в Linux).
Таким образом, можно определить обработчик следующим образом:
void HANDLER (int signum) {. . .}
Аргумент SIGNUM определяет сигнал, который будет обрабатываться. Сигнал
необходимо указывать в виде символьного обозначения, так как соответствующие
числовые идентификаторы могут различаться в различных операционных системах.
Аргумент ACTION указывает на действие, которое будет выполняться при появлении
сигнала. Аргумент может принимать следующие значения:
SIG_DFL Действие по умолчанию.
SIG_IGN Сигнал игнорируется.
HANDLER Определяет адрес функции-обработчика.
Функция signal возвращает то действие, которое использовалось для заданного
сигнала до выполнения функции. При возникновении ошибки возвращается значение
SIG_ERR, при задании неправильного идентификатора сигнала возвращаемое значение
равно EINVAL.
Пример использования обработчика сигналов для удаления временных файлов
при фатальных ошибках:
#include
void termination_handler(int signum)
{
struct temp_file *p;
for (p = temp_file_list; p; p = p->next())
unlink(p->name);
}
int main(void)
{
. . .
if (signal(SIGINT, termination_handler) == SIG_IGN)
signal(SIGINT, SIG_IGN);
if (signal(SIGHUP, termination_handler) == SIG_IGN)
signal(SIGINT, SIG_IGN);
22
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »
