У меня проблема с SIGALRM, которая, похоже, не сработала.Я использую signal (), а не sigaction () для простоты кода.
Цель состоит в том, чтобы иметь некоторый цикл, который читает, но через 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);
}
}
Хорошо, оператор fprintf () в функции catch_alarm () никогда не вызывается, и я не уверен почему (я использую Linux).1007 * Любая помощь будет великолепна,
Большое спасибо,
Джари