TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #149 6.01K
Функции для работы с набором сигналов

Многие системные вызовы, связанные с сигналами, работают с типом данных sigset_t, который представляет их набор. Например, sigaction() и sigprocmask() позволяют программе указать группу сигналов, которые должны быть заблокированы процессом, sigpending() возвращает группу, находящуюся в режиме ожидания.

В общем-то, работать с сетом напрямую - дикость, поэтому сейчас рассмотрим несколько фунций, которые для этого используются.

Функция sigemptyset() инициализирует пустой набор сигналов, sigfillset(), напротив, записывает в него все сигналы:


#include <signal.h>

// Возвращают 0 при успешном завершении, –1 при ошибке
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t, *set);


Для инициализации набора сигналов должна быть использована одна из функций выше. Это необходимо потому, что C за вас ничего не определит. Если проигнорировать данный шаг, можно спокойно аварийно положить приложение, т.к. сет заполнится мусором.

После инициализации отдельные сигналы могут быть добавлены в набор с помощью функции sigaddset() и удалены — с помощью sigdelset():


#include <signal.h>
int sigaddset(sigset_t *set, int sig);
int sigdelset(sigset_t *set, int sig);


Функция sigismember() проверяет, является ли сигнал членом набора:


#include <signal.h>
int sigismember(sigset_t *set, int sig);


В GNU-библиотеке C реализованы три нестандартные функции, которые дополняют те, что были описаны выше:


#define _GNU_SOURCE
#include <signal.h>

int sigandset(sigset_t *set, sigset_t *left, sigset_t *right);
int sigorset(sigset_t *set, sigset_t *left, sigset_t *right);
int sigisemptyset(const sigset_t *set);


1) sigandset() — выполняет логическое И (пересечение) над двумя наборами left и right, помещает результат в dest;

2) sigorset() — выполняет логическое ИЛИ (объединение) над двумя наборами left и right, помещает результат в dest;

3) sigisemptyset() — возвращает 1, если в set нет ни одного сигнала, 0 в противном случае;

LinuxCamp
  • 👍 18
  • 🔥 7
  • ❤‍🔥 4
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →