1
我的目标是制作一个每秒关闭的警报,以便在通过sigaction处理它时打印时间,因此每秒都会打印新时间。我在这段代码的中间有一个循环,它计数到一个随机数,但是我把它用来使这段代码更加简洁并且更容易看,因为我相信问题在于我如何使用sigaction,因为它会打印多个时间一秒钟,但我只需要在这一秒输出一行。sigaction捕捉SIGALRM
#include <stdio.h>
#include <signal.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
void alarmPrint(int signum);
time_t curtime;
int main(){
printf("Enter ^C to end the program:\n");
struct sigaction sig;
sig.sa_handler = alarmPrint;
int count;
int final;
time(&curtime);
srandom(curtime);
while(1){
time(&curtime);
alarm(1);
printf("\n");
if(sigaction(SIGALRM, &sig, 0) == -1){
printf("Error\n");
}
}
return 0;
}
void alarmPrint(int signum){
printf("current time is %s\n", ctime(&curtime));
}
那么问题是什么? – 2014-11-03 21:39:12
注意这个错字'time_t cur time;'应该是time_t curtime; – 2014-11-03 21:41:06
这是如何正确使用sigaction捕捉SIGALRM信号时,我的理解是说alarm(1)意味着SIGALRM将在1秒内发送,sigaction将捕获然后调用alarmPrint然后打印当前时间,因此此程序运行时间的每一秒都将被打印。然而,目前它每秒打印一次以上,这是我的问题出现的地方,sigaction和alarm是否正确地用于所需的输出? – Konnor 2014-11-03 21:42:53