Книга: 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

Оглавление книги


Генерация: 0.319. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз