Zver2011
@Zver2011

Как изменяется выполнение программы, при использовании интервального таймера с различными временными интервалами в ОС Linux?

Есть некая программа, в которой используется интервальный таймер. Как я понял, данный таймер нужен для отсчета промежутка времени, по истечении которого процессу передается определенный сигнал (SIGALRM, SIGVTALRM, SIGPROF). В коде я изменяю временной промежуток таймера типа ITIMER_REAL: 100мс, 300мс, 500мс, компилирую, выполняю с выводом результата в файл. Итого выходит 3 одинаковых по размеру файла, соответственно, с одинаковым содержимым (100 итераций стишка).

Вопрос: Что должно измениться в выводе программы? Или, может должно измениться время выполнения программы?

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
void timer_handler (int signum)
{
  static int count=0;
  printf("\nТаймер протикал %d раз\n\n",++count);
  if(count>=100)
  exit(0);
}
int main()
{
  int i;
  struct sigaction sa;
  struct itimerval timer;
  char stix1[]={"У попа была собака,"};
  char stix2[]={"он ее любил."};
  char stix3[]={"Она съела кусок мяса,"};
  char stix4[]={"он её убил."};
  char stix5[]={"Схоронил ее под камнем,"};
  char stix6[]={"а на камне написал:"};
  memset(&sa,0,sizeof(sa));
  sa.sa_handler=&timer_handler;
  sigaction(SIGALRM,&sa,NULL);
  /* Timer activate within 500 millisecond...*/
  timer.it_value.tv_sec=0;
  timer.it_value.tv_usec=500000;
  /*...and will be activated within other 500 milliseconds*/
  timer.it_interval.tv_sec=0;
  timer.it_interval.tv_usec=500000;
  /* Begin of virtual timer.*/
  setitimer(ITIMER_REAL,&timer,NULL);
  do
  {
    sleep(1);
    for(i=0;i<sizeof(stix1);i++)
    printf("%c",stix1[i]);
    printf("\n");
    for(i=0;i<sizeof(stix2);i++)
    printf("%c",stix2[i]);
    printf("\n");
    for(i=0;i<sizeof(stix3);i++)
    printf("%c",stix3[i]);
    printf("\n");
    for(i=0;i<sizeof(stix4);i++)
    printf("%c",stix4[i]);
    printf("\n");
    for(i=0;i<sizeof(stix5);i++)
    printf("%c",stix5[i]);
    printf("\n");
    for(i=0;i<sizeof(stix6);i++)
    printf("%c",stix6[i]);
    printf("\n");
  }
  while(1);
}

  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
У вас проблемы с компилятором? Запустите и посмотрите. Это всё-таки форум, а не бюро отладки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы