나는이 코드를 만들었고 프로그램에 "나는 살아있다."라는 메시지를 3 초마다 인쇄하도록 경고 신호 (SIGALRM
)를 사용해야합니다.SIGALRM을 올바르게 사용하려면 어떻게해야합니까?
하지만 CTR-C를 누를 때만 "I 'm Alive"메시지가 전송됩니다. 올바른 위치에 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