-->

Операционная система UNIX

На нашем литературном портале можно бесплатно читать книгу Операционная система UNIX, Робачевский Андрей Михайлович-- . Жанр: ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Операционная система UNIX
Название: Операционная система UNIX
Дата добавления: 16 январь 2020
Количество просмотров: 432
Читать онлайн

Операционная система UNIX читать книгу онлайн

Операционная система UNIX - читать бесплатно онлайн , автор Робачевский Андрей Михайлович

Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.

В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).

Для широкого круга пользователей.

 

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 49 50 51 52 53 54 55 56 57 ... 156 ВПЕРЕД
Перейти на страницу:

#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
передается набор сигналов, которые будут добавлены к маске сигналов перед вызовом обработчика. Каждый процесс имеет установленную маску сигналов, определяющую сигналы, доставка которых должна быть заблокирована. Если определенный бит маски установлен, соответствующий ему сигнал будет заблокирован. После возврата из функции-обработчика значение маски возвращается к исходному значению. Заметим, что сигнал, для которого установлена функция-обработчик, также будет заблокирован перед ее вызовом. Такой подход гарантирует, что во время обработки, последующее поступление определенных сигналов будет приостановлено до завершения функции. Как правило, UNIX не поддерживает очередей сигналов, и это значит, что блокировка нескольких однотипных сигналов в конечном итоге вызовет доставку лишь одного.

Поле

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
, при завершении потомки не будут переходить в состояние зомби. Если процесс в дальнейшем вызовет функции wait(2), wait3(2), waitid(2) или waitpid(2), их выполнение будет блокировано до завершения работы всех потомков данного процесса.
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
определяет дополнительную информацию о причине поступления сигнала, a
scp
указывает на контекст процесса.

Для UNIX System V реализована следующая возможность получения более полной информации о сигнале. Если установлен флаг

SA_SIGINFO
, то при получении сигнала
sig
будет вызван обработчик, адресованный полем
sa_sigaction
. Помимо номера сигнала, обычно передаваемого обработчику сигнала, ему будет переданы указатель на структуру
siginfo_t
, содержащую информацию о причинах получения сигнала, а также указатель на структуру
ucontext_t
, содержащую контекст процесса.

Структура

siginfo_t
определена в файле <siginfo.h> и включает следующие поля:

int si_signo
Номер сигнала
int si_errno
Номер ошибки
int si_code
Причина отправления сигнала
1 ... 49 50 51 52 53 54 55 56 57 ... 156 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название