设计一个程序要求,主体程序运行时,即使用户按下了中断键[ctrl+c],也不能影响正在运行的程序,等待程序主体运行完了之后才可以进入自定义信号处理函数。

该博客探讨了如何在C程序中处理中断信号(Ctrl+C),确保在用户按下Ctrl+C时,程序能够继续运行直至完成其任务,之后才执行自定义的信号处理函数。通过使用`sigaction`和`sigprocmask`函数,博主展示了如何阻塞SIGINT信号,使得程序在执行完毕后再响应信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

设计一个程序要求,主体程序运行时,即使用户按下了中断键[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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值