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