# Управление на сигналите

| метод         | описание                                                                                   |
| ------------- | ------------------------------------------------------------------------------------------ |
| sigemptyset() | инициализира празно множество от сигнали, като всички сигнали са изключени от множеството. |
| sigfillset()  | инициализира пълно множество от сигнали, включващо всичките сигнали.                       |
| sigaddset()   | добавя сигнал към множество.                                                               |
| sigdelset()   | премахва сигнал от множество.                                                              |
| sigprocmask() | извлича и/или променя сигналната маска на извикващата нишка.                               |
| sigaction()   | променя действието на сигнала.                                                             |
| sigwait()     | чака сигнал.                                                                               |
| strsignal()   | връща низ описващ сигнала.                                                                 |

```c
#include <signal.h>

int sigemptyset (sigget_t *set);
int sigaddset (sigset_t *set, int signo);
int sigprocmask (int how, cont sigset_t *set, sigset_t *oldset);

int sigaction (int signo, const struct sigaction *act, struct sigaction *oldact);

struct sigaction {
  void (*sa_handler)(int);
  void (*sa_sigaction)(int, siginfo_t *, void *);
  sigset_t sa_mark;
  int sa_flags;
  void (*sa_restorer)(void);
};
```

**sigemptyset()** инициализира наборът от сигнали, зададен от комплекта, като го маркира празен (всички сигнали са изключени от комплекта).

**sigaddset()** добавя сигнал към комплекта от сигнали, зададен от комплекта, докато **sigdelset()** премахва знака от набора от сигнали, зададен от комплекта. И двете връщат 0 при успех, или -1 при грешка, в който случай грешката е настроена на код за грешка **EINVAL**, което означава, че знакът е невалиден идентификатор на сигнала.

Поведението на **sigprocmask()** зависи от стойността на едно от следните:

| Поле         | Описание                                                         |
| ------------ | ---------------------------------------------------------------- |
| SIG\_SETMASK | Задава се сигнална маска на извикващия процес.                   |
| SIG\_BLOCK   | Сигналите се добавят към сигналната маска на извикващият процес. |
| SIG\_UNBLOCK | Сигналите се премахват от сигналната маска на извикващия процес. |

Структура **sigaction**:

| Поле          | Описание                                                                                                                        |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| SA\_HANDLER   | Адрес на манипулатора SIG\_IGN или SIG\_DFL                                                                                     |
| SA\_MASK      | Сигнали за блокиране                                                                                                            |
| SA\_FLAGS     | Допълнителни флагове, като SA\_RESETHAND                                                                                        |
| SA\_RESETHAND | Позволява режим "еднократно". Поведението на дадения сигнал се връща към стандартното, след като обработващият сигнал се върне. |

Извикването на **sigaction()** променя поведението на сигнала, идентифициран от **signo**, което може да бъде всяка стойност освен тези, свързани със **SIGKILL** и **SIGSTOP**. Ако **act** не е NULL, системното извикване променя текущото поведение на сигнала, както е посочено в **act**. Ако **oldact** не е NULL, системното извикване запазва предишното поведение на даден сигнал (или текущия, ако **act** е NULL).
