The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование в Linux" / Оглавление документа
next up previous contents
Next: Применение сигналов для IPC Up: Сигналы Previous: Посылка сигналов с помощью   Contents

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

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

В новой концепции сигналов вначале вводится переменная примитивного типа данных:
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);

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

  1. sigprocmask (mode, NULL, alt_sig_m). В текущем процессе множество сигналов записывается по адресу alt_sig_m. mode в этом случае не оказывает эффекта;
  2. sigprocmask (mode, sig_m, NULL). Маска сигналов изменяется на новую маску sig_m;
  3. sigprocmask (mode, sig_m, alt_sig_m). Сначала актуальная, используемая в текущем процессе маска сигналов записывается в alt_sig_m, то есть сохраняется. Затем устанавливается множество сигналов sig_m.
Функция позволяет использовать три предопределенные константы:

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

#include <signal.h>

int sigsuspend(const sigset_t *sig_m);

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



2004-06-22

АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList