トリガーされていないように見える SIGALRM に問題があります。コードを簡単にするために、sigaction() ではなく signal() を使用しています。
目的は、読み取りを行うループを作成することですが、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 で実行しています)。
どんな助けでも素晴らしいでしょう、
どうもありがとうございました、
ジャリー