我一直专注于捕捉信号的许多方法。最新的一个是使用全局变量。我的目标是捕捉控制C,当它被按下时,它会设置一个标记为" 1"然后触发一些代码运行。
我的问题是,我可以抓住信号。但是发现无法运行应该在if语句中运行的代码。
void handleSignal (int signal);
int signalAction = 0;
int main ()
{
//catch signal control C
if (signal(SIGINT, handleSignal) == SIG_ERR)
{
write (2, "Error catching signal C \n", 26);
}
if (signalAction == 1)
{
write(1, "WOOO CONTROL C \n", 16);
signalAction = 0;
}
printf("%d \n", signalAction);
while(1)
sleep(1);
}
void handleSignal (int signal)
{
if (signal == SIGINT)
{
write(1, "ContrlC \n", 11);
signalAction = 1;
}
}
当按下控制c时,我得到" contrlC"从信号处理程序打印出来。然而,主函数中的if语句if(signalAction == 1)....并没有运行。
该变量必须设置为1.由于某种原因,它们是主要问题吗?
答案 0 :(得分:4)
将if(signalAction ==1)
移至while循环