问题描述
设计一个程序要求,主体程序运行时,即使用户按下了中断键[ctrl+c],也不能影响正在运行的程序,等待程序主体运行完了之后才可以进入自定义信号处理函数。
整体代码
#include "stdio.h"
#include "sys/types.h"
#include "signal.h"
#include "stdlib.h"
#include "unistd.h"
#include "sys/wait.h"
void fun_ctrl_c();
int main()
{
int i;
sigset_t set,pendset;
struct sigaction action;
(void)signal(SIGINT,fun_ctrl_c);
if(sigemptyset(&set)<0)
perror("初始化信号集合失误\n");
if(sigaddset(&set,SIGINT)<0)
perror("加入信号集合失误\n");
if(sigprocmask(SIG_BLOCK,&set,NULL)<0)
perror("往信号阻塞集增加一个信号集合错误\n");
else
{
for(i=0;i<5;i++)
{
printf("显示此文字,表示程序处于阻塞信号状态\n");
sleep(2);
}
}
if(sigprocmask(SIG_BLOCK,&set,NULL)<0)
perror("往信号阻塞加入信号失误\n");
}
void fun_ctrl_c()
{
printf("\t你按下了Ctrl+c键");
(void)signal(SIGINT,SIG_DFL);
}