Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
sigactionВнесите приведенные далее изменения, так чтобы сигнал
SIGINTsigaction#include <signal.h>#include <stdio.h>#include <unistd.h>void ouch(int sig) { printf("OUCH! - I got signal %dn", sig);}int main() { struct sigaction act;<i> act.sa_handler = ouch;</i><i> sigemptyset(&act.sa_mask);</i><i> act.sa_flags = 0;</i><i> sigaction(SIGINT, &act, 0);</i> while (1) { printf("Hello World!n"); sleep(1); }}Когда вы выполните эту версию программы, то всегда будете получать сообщение при нажатии комбинации клавиш <Ctrl>+<C>, поскольку
SIGINTsigactionSIIGQUIT$ <b>./ctrlc2</b>Hello World!Hello World!Hello World!<b>^C</b>OUCH! - I got signal 2Hello World!Hello World!<b>^C</b>OUCH! - I got signal 2Hello World!Hello World!<b>^</b>Quit$Как это работает
Программа вместо функции
signalsigactionouchSIGINTsigactionsigemptysetПосле выполнения программы вы можете обнаружить дамп ядра (в файле core). Его можно безбоязненно удалить.
Множества сигналов
В заголовочном файле signal.h определены тип
sigset_tsigaction<b>#include <signal.h></b><b>int sigaddset(sigset_t *set, int signo);</b><b>int sigemptyset(sigset_t *set);</b><b>int sigfillset(sigset_t *set);</b><b>int sigdelset(sigset_t *set, int signo);</b>Приведенные функции выполняют операции, соответствующие их названиям,
sigemptysetsigfillsetsigaddsetsigdelsetsignoerrnoEINVALФункция
sigismembererrnoEINVAL<b>#include <signal.h></b><b>int sigismember(sigset_t *set, int signo);</b>Маска сигналов процесса задается и просматривается с помощью функции
sigprocmask<b>#include <signal.h></b><b>int sigprocmask(int how, const sigset_t *set, sigset_t *oset);</b>Функция
sigprocmaskhowsetnullosetАргумент
how□
SIG_BLOCKset□
SIG_SETMASKset□
SIG_UNBLOCKsetЕсли аргумент
setnullhowosetЕсли функция
sigprocmaskhowerrnoEINVAL
