0
我遇到了似乎無法觸發的SIGALRM問題。我使用signal()而不是sigaction()來簡化代碼。發出警報()和C中的SIGALRM
其目的是讓一些循環讀取,但在x秒後,在再次讀取之前重新初始化所有變量。我用這個鬧鐘。
volatile sig_atomic_t restartBool;
void catch_alarm(int sig)
{
fprintf(stderr, "ALARM CALLED\n");
restartBool = 1;
}
int main(void)
{
int n, fd_in = 0;
char newChar;
signal(SIGALRM, catch_alarm);
while (1) { /* main loop */
restartBool = 0;
// Set a timer before we start reading
alarm(2);
while (restartBool == 0 && (n = read(fd_in, &newChar, 1)) == 1) { /* parse input */
/* ..... */
}
fprintf(stderr, "EXITED THE LOOP");
// Cancel the alarm/timer
alarm(0);
}
}
那麼在catch_alarm()函數fprintf中()語句永遠不會被調用,我不知道爲什麼(我在Linux上運行)。
任何幫助將很大,
非常感謝你,
Jary
-1代表假碼。代碼不會按原樣編譯,並且當我在`main`的開頭添加`int n,fd_in = 0,newChar;`時,它工作得很好(消息被打印)。 – 2011-02-07 23:46:46