Операционная система UNIX
Операционная система UNIX читать книгу онлайн
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
#include <signal.h>
int sigaction (int sig, const struct sigaction *act,
struct sigaction *oact);
Вся необходимая для управлением сигналами информация передается через указатель на структуру
sigaction
void (*sa_handler)() | Обработчик сигнала sig |
void (*sa_sigaction)(int, siginfo_t*, void*) | Обработчик сигнала sig SA_SIGINFO |
sigset_t sa_mask | Маска сигналов |
int sa_flags | Флаги |
Поле
sa_handler
SIG_IGN
SIG_DFL
sa_handler
sa_sigaction
NULL
sa_mask
Поле
sa_flags
SA_ONSTACK | Если определена функция-обработчик сигнала, и с помощью функции sigaltstack(2) задан альтернативный стек для функции-обработчика, то при обработке сигнала будет использоваться этот стек. Если флаг не установлен, будет использоваться обычный стек процесса. |
SA_RESETHAND | Если определена функция-обработчик, то диспозиция сигнала будет изменена на SIG_DFL |
SA_NODEFER | Если определена функция-обработчик, то сигнал блокируется на время обработки только в том случае, если он явно указан в поле sa_mask |
SA_RESTART | Если определена функция-обработчик, ряд системных вызовов, выполнение которых было прервано полученным сигналом, будут автоматически перезапущены после обработки сигнала. [25] Если флаг не установлен, системный вызов возвратит ошибку EINTR |
SA_SIGINFO | Если диспозиция указывает на перехват сигнала, вызывается функция, адресованная полем sa_sigaction sa_handler |
SA_NOCLDWAIT | Если указанный аргументом sig SIGCHLD |
SA_NOCLDSTOP | Если указанный аргументом sig SIGCHLD |
*Данные флаги не определены для UNIX BSD.
В системах UNIX BSD 4.x структура
sigaction
struct sigaction {
void (*sa_handler)();
sigset_t sa_mask;
int sa_flags;
};
где функция-обработчик определена следующим образом:
void handler(int signo, int code, struct sigcontext *scp);
В первом аргументе
signo
code
scp
Для UNIX System V реализована следующая возможность получения более полной информации о сигнале. Если установлен флаг
SA_SIGINFO
sig
sa_sigaction
siginfo_t
ucontext_t
Структура
siginfo_t
int si_signo | Номер сигнала |
int si_errno | Номер ошибки |
int si_code | Причина отправления сигнала |