#include < signal.h > int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
A chamada de sistema sigaction
é usada para associar uma ação com o recebimento de um sinal. sigaction informa ao sistema operacional o que tem que ser feito quando um sinal for recebido.A estrutura sigaction está definida como se segue:
struct sigaction { void (*sa_handler)(int); sigset_t sa_mask; int sa_flags; }
sa_handler é um ponteiro para uma função a ser chamada quando um sinal é recebido. Pode também ser SIG_DFL, que indica que o sistema operacional executará a ação padrão, ou SIG_IGN, que indica que o sistema operacional ignorará o sinal.
sa_mask é um conjunto de sinais que indica quais sinais devem ser bloqueados enquanto ocorre a execução do manipulador de sinais, sa_handler. Os sinais bloqueados não serão entregues até que sa_handler tenha terminado. Sinais não bloqueados poderão ser tratados normalmente.
sa_flags pode alterar o comportamento do manipulador de sinais. AS_RESTART é um dos flags mais comumente usados. Ele causará que chamadas de sistema interrompidas por um sinal sejam recomeçadas. Veja as páginas de manual para maiores detalhes.
signum indica o sinal sobre o qual deve-se atuar.
Se o act não é NULL, a estrutura sigaction corrente/antiga para o sinal especificado será substituída pela estrutura sigaction na localização apontada por act.
Se oldact não é NULL, a estrutura sigaction corrente/antiga para o sinal especificado será copiada para a localização de memória apontada por oldact.
Veja o Experimento #4 para maiores informações sobre chamadas sigaction e sinais em geral.
Para criar um manipulador a ser chamado quando SIGUSR1 é recebido e que bloqueará todos os sinais durante a execução do manipulador:
#include < signal.h > int handler( int signo ) { ... } ... struct sigaction act; struct sigaction oldact; ... act.sa_handler = &handler; sigfillset( &act.sa_mask ); act.sa_flags = 0; ... if( sigaction( SIGUSR1, &act, &oldact ) == -1 ) { perror( "sigaction" ); }
sigaddset sigdelset sigemptyset sigfillset sigprocmask.html sigqueue.html sigsuspend
AIX, Linux, Lynx, SunOS e Solaris
Para maiores informações sobre este comando, consulte a página do manual de seu sistema operacional (comando man).