×
Traktatov.net » Язык программирования C [Лекции и упражнения, 6-е изд.] » Читать онлайн
Страница 534 из 557 Настройки


Обработка сигналов: signal.h

Сигнал — это условие, которое может быть сообщено программе во время ее выполнения. Он представляется положительным целым числом. Функция raise() отправляет, или генерирует, сигнал, а функция signal() устанавливает ответ на определенный сигнал.

В стандарте определен целочисленный тип, sig_atomic_t, используемый для указания объектов, которые являются атомарными в отношении обработчиков сигналов. Другими словами, обновление атомарного типа представляет собой неделимый процесс.

Стандарт предоставляет макросы, перечисленные в табл. B.V.18, которые предназначены для представления возможных сигналов; реализация может добавлять дополнительные значения. Эти макросы могут использоваться в качестве аргументов функций raise() и signal().

Таблица 6.V.18. Макросы сигналов


В качестве второго аргумента функция signal() принимает указатель на функцию void, получающую аргумент int. Она также возвращает указатель того же типа. Функция, вызываемая в ответ на сигнал, называется обработчиком сигнала. Стандарт определяет три макроса, подходящие этому прототипу:

void (*funct)(int);

В табл. B.V.19 перечислены эти макросы.

Если сигнал sig сгенерирован, a func указывает на функцию (см. прототип signal() в табл. E.V.20), то сначала в большинстве случаев вызывается signal (sig, SIG_DFL) для сброса обработчика сигнала к стандартной установке, после чего вызывается (*func)(sig).


866 Приложение Б

Таблица 6.V.19. Макросы типа void (*f) (int)


Функция обработки сигнала, указанная с помощью func, может быть завершена выполнением оператора return либо вызовом abort(), exit() или longjmp().

В табл. B.V.20 перечислены функции сигналов.


Таблица 6.V.20. Функции сигналов





Выравнивание: stdaiign.h (С11)

В заголовочном файле stdaiign.h определены четыре макроса, имеющие отношение к определению и указанию свойств выравнивания объектов данных. Эти макросы перечислены в табл. B.V.21. Первые два макроса создают псевдонимы, совместимые с C++.

Таблица 6.V.21. Макросы в stdalign.li


Переменное количество аргументов: stdarg.h

Заголовочный файл stdarg.h предоставляет средства для определения функций, принимающих переменное количество аргументов. Прототип для такой функции должен содержать список параметров, в котором указан как минимум один параметр, за которым следует троеточие:

void f 1 (int n, ...);

int f2 (int n, float x, int k, ...);

double f3 (..A;


Справочные материалы 867

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

В заголовочном файле объявлен тип va list для представления объекта данных, который применяется для хранения параметров, соответствующих троеточию в списке параметров. В табл. B.V.22 перечислены макросы, которые должны использоваться в функциях с переменным количеством параметров. Перед применением этих макросов должен быть объявлен объект типа va_list.

Таблица 6.V.22. Макросы переменных списков аргументов


Поддержка атомарности: stdatomic.h (С11)