2013-04-15 69 views
3

我做了這段代碼,我必須使用報警信號(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); 
} 
+5

注意:不應該在信號處理程序中使用printf();它是不可重入的。 – wildplasser

+0

@wildplasser所以我應該把printf(「我活着)在int main()??? –

+3

你可以把printf()放在任何地方,但*不在信號處理器*中,它*可以*工作,但有一天它可能會爆炸在你的臉上。準備好了。 – wildplasser

回答

7

也許在您的main()中加入alarm(3)

+1

It works,thanks @unautre –

+0

鏈接到文檔:http://linux.die.net/man/2/alarm – Robert