All pastes #765470 Raw Edit

Utilisation de sigaction

public text v1 · immutable
·published 2007-11-08 01:36 UTC
rendered paste body
#include <signal.h>
#include <stdio.h>


int	examine_signal(int sig)
{
  struct sigaction	old;

  printf(" ** Dumping sigaction information for signal %i\n", sig);
  if (sigaction(sig, (void *)0, &old) != 0)
    perror("sigaction");
  printf("handler : %08p\n", old.sa_handler);
  printf("action : %08p\n", old.sa_sigaction);
  printf("flags - STOP     : %i\n", old.sa_flags & SA_NOCLDSTOP);
  printf("flags - WAIT     : %i\n", old.sa_flags & SA_NOCLDWAIT);
  printf("flags - RESET    : %i\n", old.sa_flags & SA_RESETHAND);
  printf("flags - STACK    : %i\n", old.sa_flags & SA_ONSTACK);
  printf("flags - RESTART  : %i\n", old.sa_flags & SA_RESTART);
  printf("flags - NODEFER  : %i\n", old.sa_flags & SA_NODEFER);
  printf("flags - SIGINFO  : %i\n", old.sa_flags & SA_SIGINFO);

}
int	block_signal(int sig)
{
  sigset_t	newset;

  sigemptyset(&newset);
  sigaddset(&newset, SIGUSR1);

  sigprocmask(SIG_SETMASK, &newset, NULL);
}

void	fcn(int p)
{
  printf("SIGUSR1\n");
}

int main()
{
  struct sigaction	act;
  
  examine_signal(SIGUSR1);
  signal(SIGUSR1, fcn);
  
  examine_signal(SIGUSR1);
  kill(getpid(), SIGUSR1);
  
  block_signal(SIGUSR1);
  examine_signal(SIGUSR1);
  kill(getpid(), SIGUSR1);
}