2013-04-15 4 views
3

나는이 코드를 만들었고 프로그램에 "나는 살아있다."라는 메시지를 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); 
} 
+5

참고 : 신호 처리기 내에 printf()를 사용하면 안됩니다. 그것은 재진입 적이 지 않습니다. – wildplasser

+0

@wildplasser 그래서 printf ("나는 살아있다")를 int main()에 놓아야한다. –

+3

당신은 printf()를 아무 곳에 나 둘 수 있지만 시그널 핸들러에는 없다. 하지만 언젠가는 여러분의 얼굴에서 폭발 할 수도 있습니다. 준비하십시오. – wildplasser

답변

7

어쩌면 당신의 main()alarm(3)을 추가?

+1

감사합니다. @unautre –

+0

docs에 링크 : http://linux.die.net/man/2/alarm – Robert

관련 문제