0
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>
const struct itimerval nak_timer={{20,10} , {20,10} };
struct itimerval old_value = {{10,0},{10,0}};
sigset_t set;
int main()
{
int rc , i=0;
void NAKTime(int signal);
//Register a signal handler
sigemptyset(&set);
sigaddset(&set,SIGALRM);
sigset(SIGALRM , NAKTime);
//Create a Timer
rc = setitimer(ITIMER_REAL , &nak_timer,&old_value);
if(1 == rc)
{
printf("\nError in execution of Timer \n");
return 1;
}
printf("Timer function executed\n");
return 0;
}
void NAKTime(int signal)
{
printf("Entered NAKTime Function()\n");
if(signal == SIGALRM)
printf("\nFunction NAKTime Called!!\n");
}
在执行setitimer(...)时,必须调用NAKTime函数。但它没有被调用。我试图用SIGINT等其他信号测试NAKTime,它工作得很好。我不确定我是否在setitimer()函数中丢失了某些东西。SIGALRM信号未生成。在我的代码中,函数NAKTime没有被调用
OT:不要在signal handers中使用'printf()',因为它不能保证异步信号安全。 – alk 2014-09-11 07:59:29
但它适用于SIGINT信号 – 2014-09-11 20:04:18
您的用于NakTime()函数的原型被隐藏在main()函数中,所以在NakTime()函数的声明中没有看到。 – user3629249 2014-09-12 05:06:48