#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).