2014-04-16 56 views
0

我创建了一个程序,其中一个信号调用会安装一个新的信号处理程序'signum',并且在按下终端特殊字符时基本显示消息,例如CRTL-C。跟踪调用了多少个信号?

我想知道如果我想跟踪CRTL-C被按下多少次,该怎么办?我该如何去实施呢?谢谢。如果你想在其他地方可用的计数

void f(int signum) { 
    static int cnt = 0; 
    printf('Hahah, you clicked me %d time(s)!', ++cnt); 
} 

,然后使用一个全局变量来代替:

#include <stdio.h> 
#include <signal.h> 

main() { 
    void f(int);  
    int i; 
    int count = 0; 

    signal(SIGINT, f);   

    for (i = 0; i < 5; i++) {  
     printf("...I am waiting for you...\n"); 
     sleep(1); 
    } 

void f(int signum) {  
    printf("Haha, you clicked me!\n"); 
} 
+0

在信号处理程序中调用'printf'是不安全的 - 如果信号在另一个I/O调用(例如主循环中的'printf')中传递,它可能会崩溃或以其他方式行为不端。 –

回答

0

使用一个静态变量。