这个问题基于我昨天提出的一个问题: In C, linux, about kill signal and sleep() in loop
这些代码是我所有代码的一部分。
int flag=0;
void sigint(int sig){
flag=1;
}
void alive(void) {
signal(SIGINT, sigint);
while(1){
//printf("%d\n",out);
//pause();
//sleep(1);
if(flag==1){
printf("no\n");
flag=0;
}
}
}
技术上我想要的是当我按下ctrl-c程序时可以输出“no”。 昨天,在我的Mac上,我运行这些代码并且它无法输出任何内容,然后我添加sleep(1),它运行良好以及添加pause() 我以为就是这样。事实上,这是我的教授留给我们在sunlab系统中做的任务的一部分。在我的sunlab帐户(Linux平台)上复制这些代码之后。运行。输出如下:
^Cno
^C
我只能使用sigint信号一次,当按下ctrl-c第二次退出时,我不知道为什么。 我的朋友给我看了他的代码,他的代码就像我在这里附上的代码,没有停顿或睡眠,只使用while(1)或for(;;)。并且在他的sunlab帐户上运行良好。
这里我提到了三个设备。
我的Mac:我需要使用pause()或sleep(1)并且可以实现我想要的功能。一些似乎正确答案在这里:In C, linux, about kill signal and sleep() in loop
我的sunlab帐户:在第二次ctrl-c之后退出,在第一次ctrl-c之后可以输出'no'。存在pause()不会明显影响我的结果
我的朋友sunlab帐户:效果很好。 pause()的存在显然不会影响我的结果 为什么不同。
供应:根据我教授的话,第三个应该是正确的。
答案 0 :(得分:0)
我知道,我没有重置信号()。为什么没有人告诉我。
void sigint(int sig){
flag=1;
signal(SIGINT, sigint);
}