#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>
extern int errno;
volatile sig_atomic_t quitflag;
static void sig_int(int signo)
{
if(signo == SIGINT)
{
printf("INTERRUPT!\n");
}
else if(signo == SIGQUIT)
{
quitflag = 1;
}
}
int main(int argc, char **argv)
{
sigset_t newmask, oldmask, zeromask;
if(signal(SIGINT, sig_int) == SIG_ERR)
{
printf("SIGINT: %s\n", strerror(errno));
exit(-1);
}
if(signal(SIGQUIT, sig_int) == SIG_ERR)
{
printf("SIGQUIT: %s\n", strerror(errno));
exit(-2);
}
sigemptyset(&newmask);
sigemptyset(&zeromask);
sigemptyset(&oldmask);
sigaddset(&newmask, SIGQUIT);
if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
{
printf("sigprocmask(SIG_BLOCK): %s\n", strerror(errno));
exit(-3);
}
while(quitflag == 0)
{
sigsuspend(&zeromask);
}
if(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
{
printf("sigprocmask(SIG_SETMASK): %s\n", strerror(errno));
exit(-4);
}
exit(0);
}
sigsuspend 用于等待信号处理程序设置全局变量
最新推荐文章于 2024-02-06 17:50:58 发布