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