我做了這段代碼,我必須使用報警信號(SIGALRM
)使程序每3秒鐘打印一條消息「我還活着」。如何正確使用SIGALRM?
但它不起作用,它只在按CTR-C時發送信息「我活着」,我在猜測 我沒有把SIGALRM功能放在正確的位置,你能幫忙嗎我?
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
unsigned Count = 0; //Counts the number of times it receives the signal SIGINT.
void mypause(int sign); //prototype of the function my pause.
void mypause(int sign) {
signal(SIGALRM, mypause); //Set alarm clock for 3 seconds.
alarm(3);
printf("I'm Alive");
signal(SIGINT, mypause);
switch (sign) {
case SIGINT:
printf("\nPressed CTR-C\n");
printf("I'm running, waiting for a sign\n");
Count++;
break;
case SIGQUIT:
printf("\nPressed CTR-\\n");
printf("You pressed CTR-C %d times", Conta);
exit(0); //Exit program.
break;
}
}
int main() {
signal(SIGALRM, mypause);
signal(SIGINT, mypause);
signal(SIGQUIT, mypause);
printf("\nI'm running waiting for a signal\n");
while (1) {}
return (0);
}
注意:不應該在信號處理程序中使用printf();它是不可重入的。 – wildplasser
@wildplasser所以我應該把printf(「我活着)在int main()??? –
你可以把printf()放在任何地方,但*不在信號處理器*中,它*可以*工作,但有一天它可能會爆炸在你的臉上。準備好了。 – wildplasser