C中的mac,关于来自处理程序的信号和标志在不同设备上的循环不同行为

时间:2016-09-07 00:50:56

标签: c linux macos signals

这个问题基于我昨天提出的一个问题: 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()的存在显然不会影响我的结果 为什么不同。

供应:根据我教授的话,第三个应该是正确的。

1 个答案:

答案 0 :(得分:0)

我知道,我没有重置信号()。为什么没有人告诉我。

void sigint(int sig){
    flag=1;
    signal(SIGINT, sigint);
}