23,220
社区成员
发帖
与我相关
我的任务
分享
/* Install signal handler */
signal( SIGALRM, handler );
/* Suspend signal SIGSEGV */
sigset_t mask;
sigemptyset( &mask );
sigaddset( &mask, SIGSEGV );
while ( 1 )
{
alarm( 1 );
sigsuspend( &mask );
}

#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
/* ARGSUSED */
static void catch_sigalrm(int sig)
{
(void)printf("%s\n", "SIGALRM received.");
}
static void (*Signal (int sig, void (*handler)(int)))(int)
{
struct sigaction act, oact;
act.sa_handler = handler;
act.sa_flags = 0;
#ifdef SA_INTERRUPT
act.sa_flags |= SA_INTERRUPT;
#endif
if (sigaction(sig, &act, &oact))
return SIG_ERR;
return oact.sa_handler;
}
int main(void)
{
struct itimerval it;
(void)Signal(SIGALRM, &catch_sigalrm);
it.it_interval.tv_sec = 1;
it.it_interval.tv_usec = 0;
it.it_value.tv_sec = 1;
it.it_value.tv_usec = 0;
(void)setitimer(ITIMER_REAL, &it, NULL);
/* CONSTCOND */
for (;;)
(void)pause();
/* NOTREACHED */
return 0;
}
