next up previous contents
Next: Применение сигналов для IPC. Up: Сигналы Previous: Посылка сигналов с помощью   Contents

Работа с сигналами в Linux.

В системах Linux концепция сигналов была расширена. Это вызвано следующими недостатками старого ANSI-C подхода:

В новой концепции сигналов вначале вводится переменная примитивного типа данных sigset_t.

sigset_t signal_set;
Множество сигналов инициализируется функцией sigemptyset().

#include <signal.h>

int sigemptyset(sigset_t *sig_m);

Теперь можно добавлять новые сигналы для конкретного процесса функцией:

#include <signal.h>

int sigaddset(sigset_t *sig_m, int signr);

signr являются номерами сигналов, которые добавляются во множество. Также можно использовать символическое имя, например:

sigaddset(&signal_set, SIGINT);
С помощью функции

#include <signal.h>

int sigdelset(setsig_t *sig_m, int signr);

сигнал signr удаляется из множества сигналов sig_m. Чтобы проверить, имеется ли некоторый сигнал в множестве, можно использовать следующую функцию:

#include <signal.h>

int sigismember(sigset_t sig_m,int signr);

Если сигнал присутствует в множестве, функция возвращает 1, иначе 0.

Существует функция для сохранения или изменения маски сигналов:

#include <signal.h>

int sigprocmask(int mode, const sigset_t *sig_m, sigset_t *alt_sig_m);

Существует три режима использования этой функции:

Функция позволяет использовать три предопределенные константы:

Если нужно изменить маску сигналов или запретить все сигналы во время выполнения определенной части кода, существует функция:

#include <signal.h>

int sigsuspend(const sigset_t *sig_m);

С помощью этой функции можно блокировать процесс до тех пор, пока не придет нужный сигнал.



2003-12-09