的信號和標誌在循環不同的行爲處理這個問題是基於一個問題,我昨天問: In C, linux, about kill signal and sleep() in loop下,在Mac上,對不同設備
這些代碼是我所有代碼的一部分。
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上,我運行這些代碼,它不能輸出任何東西,然後我添加睡眠(1),它工作正常,以及添加暫停() 我以爲是這樣。事實上,這是我的教授留給我們在sunlab系統中完成的任務的一部分。在我的sunlab帳戶(Linux平臺)上覆制這些代碼後。運行。輸出如下:
^Cno
^C
我只能用SIGINT信號只有一次,當按下Ctrl-C來第二次就退出,我不知道爲什麼。 我的朋友給我看他的代碼,他的代碼就像我在這裏附上的,沒有暫停或睡覺,只用於while(1)或(;;;)。並且在他的sunlab賬戶上運行良好。
這裏我提到了三個設備。我需要使用pause()或sleep(1),並且可以實現我想要的功能。一些似乎正確的答案在這裏:In C, linux, about kill signal and sleep() in loop
我的sunlab帳戶:第二個ctrl-c後退出,可以在第一個ctrl-c後輸出'no'。存在暫停()不會影響我的結果明顯
我的朋友sunlab帳號:效果很好。暫停()的存在並不影響我的結果明顯 爲什麼不同。
供給:根據我的教授的話,第三個應該是對的。
嘗試將標誌聲明爲volatile。我懷疑C編譯器是否將該標誌== 1退出循環,否則。 –