C++程序  |  49行  |  863 B

/* Ltrace Test : signals.c.
   Objectives  : Verify that ltrace can trace user defined signal.
   This file was written by Yao Qi <qiyao@cn.ibm.com>. */

#include<stdio.h>
#include<signal.h>
#include <sys/types.h>

#define LOOP	7

void 
handler(int signum,siginfo_t *info,void *act)
{
  /* Trace printf in signal handler.  */
  printf("sival_int = %d\n",info->si_value.sival_int);
}

int 
main ()
{
  struct sigaction act;	
  union sigval mysigval;
  int i;
  int sig;
  pid_t pid;
  
  mysigval.sival_int=0;
  
  /* Use an user-defined signal 1.  */
  sig = SIGUSR1;
  pid=getpid();
  
  sigemptyset(&act.sa_mask);
  act.sa_sigaction=handler;
  act.sa_flags=SA_SIGINFO;
  
  if(sigaction(sig,&act,NULL) < 0)
    {
      printf("install sigal error\n");
    }
  
  for(i=0; i<LOOP; i++)
    {
      sleep(1);
      sigqueue(pid,sig,mysigval);
    }
  return 0;
}