Sistemas Operacionais

Chamada de Sistema: sigaction()


SINÓPSE

#include < signal.h >

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

 

DESCRIÇÃO

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.

 

EXEMPLO

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" );
}

 

VEJA TAMBÉM

sigaddset sigdelset sigemptyset sigfillset sigprocmask.html sigqueue.html sigsuspend


DISPONÍVEL

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