Не понимаю, в этом коде все работает нормально, как и должно быть, таймер не завершает работу после первой секунды.
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
static int count = 0;
struct itimerval timer;
int in = 1;
void sighandler(int sig)
{
if (sig == SIGALRM)
{
count++;
printf("%d\n", count);
if (count % 3 == 0)
{
timer.it_interval.tv_sec = 0;
timer.it_value.tv_sec = 0;
setitimer(ITIMER_REAL, &timer, NULL);
in = 1;
}
}
}
int main()
{
signal(SIGALRM, sighandler);
char ch = '0';
while (1)
{
if (in == 1)
{
printf("input> ");
scanf("%c", &ch);
switch (ch)
{
case 's':
{
timer.it_interval.tv_sec = 1;
timer.it_value.tv_sec = 1;
setitimer(ITIMER_REAL, &timer, NULL);
in = 0;
break;
}
default: break;
}
}
}
return 0;
}
В другом же коде (не могу его показать), где сама структура идентична этому коду, таймер завершает работу после первого достижения нуля значением it_value. И при этом программа завершается с выводом в терминал «Сигнал таймера», хотя цикл while (1) не должен допускать этого... Вторые сутки бьюсь уже. !!!ЕДИНСТВЕННОЕ!!! что отличает этот код от моего - терминал работает в неканоническом режиме. Но, по идее, это не должно влиять на работу обработчика сигнала. В чем может быть проблема?