Книга: UNIX: взаимодействие процессов
Сигналы Posix: функции типа Async-Signal-Safe
Сигналы Posix: функции типа Async-Signal-Safe
Недостаток пpoгрaммы из листинга 5.8 в том, что она вызывает mq_notify, mq_receive и printf из обработчика сигнала. Ни одну из этих функций вызывать оттуда не следует.
Функции, которые могут быть вызваны из обработчика сигнала, относятся к группе, называемой, согласно Posix, async-signal-safe functions (функции, обеспечивающие безопасную обработку асинхронных сигналов). В табл. 5.1 приведены эти функции по стандарту Posix вместе с некоторыми дополнительными, появившимися только в Unix 98.
Функции, которых нет в этом списке, не должны вызываться из обработчика сигнала. Обратите внимание, что в списке отсутствуют стандартные функции библиотеки ввода-вывода и функции pthread_XXX для работы с потоками. Из всех функций IPC, рассматриваемых в этой книге, в список попали только sem_post, read и write (подразумевается, что последние две используются с программными каналами и FIFO).
ПРИМЕЧАНИЕ
Стандарт ANSI С указывает четыре функции, которые могут быть вызваны из обработчика сигналов: abort, exit, longjmp, signal. Первые три отсутствуют в списке функций async-signal-safe стандарта Unix 98.
Таблица 5.1. Функции, относящиеся к группе async-signal-safe
access fpathconf rename sysconf
aio_return fstat rmdir tcdrain
aio_suspend fsync sem_post tcflow
alarm getegid setgid tcflush
cfgetispeed geteuid setpgid tcgetattr
cfgetospeed getgid setsid tcgetgrp
cfsetispeed getgroups setuid tcsendbreak
cfsetospeed getpgrp sigaction tcsetattr
chdir getpid sigaddset tcsetpgrp
chmod getppid sigdelset time
chown getuid sigemptyset timer_getoverrun
clock_gettime kill sigfillset timer_gettime
close link sigismember timer_settime
creat lseek signal times
dup mkdir sigpause umask
dup2 mkfifo sigpending uname
execle open sigprocmask unlink
execve pathconf sigqueue utime
_exit pause sigset wait
fcntl pipe sigsuspend waitpid
fdatasync raise sleep write
fork read stat
- Пример: простая программа с уведомлением
- Сигналы Posix: функции типа Async-Signal-Safe
- Пример: уведомление сигналом
- Пример: уведомление сигналом с отключением блокировки
- Пример: уведомление с использованием sigwait вместо обработчика
- Пример: очереди сообщений Posix и функция select
- Пример: запуск нового потока
- 10.6. Сигналы POSIX
- Аргументы функции в Python
- Использование CAST() с типами дата
- 3. Функции
- Новые функции API для работы с Blob и массивами
- LOCK SIGNAL
- Математические функции
- Перегрузка методов с несколькими параметрами типа
- Размытые функции
- Создание столбцов и работа с типами содержимого
- 7.3. Финансовые функции
- 4.3. Логические функции и таблицы истинности