gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:56 24 4
gpt4 key购买 nike

这个问题是基于我昨天问的一个问题: 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 时程序可以输出“否”。昨天,在我的 Mac 上,我运行了这些代码,但它无法输出任何内容,然后我添加了 sleep(1),它和添加 pause() 一样运行良好我以为就是这样。事实上,这是我的教授留给我们在 sunlab 系统中完成的任务的一部分。在我将这些代码复制到我的 sunlab 帐户(一个 linux 平台)之后。运行。输出如下:

^Cno
^C

我只能用一次sigint信号,第二次按ctrl-c就退出了,我不知道为什么。我的 friend 给我看了他的代码,他的代码就像我在这里附加的一样,没有暂停或休眠,只使用 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() 的存在显然不会影响我的结果

我的 friend sunlab 帐户:运作良好。 pause() 的存在显然不会影响我的结果为什么会有差异。

补充:按照我教授的话,第三个应该是对的。

最佳答案

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

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

关于mac 中的 C,关于来自处理程序的信号和标志在不同设备上循环不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com