2013-04-15 68 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