setitimer

setitimerを用いたタイマ使用のサンプル
下記では1秒周期でシグナルが発生する。

// timer.c

#include <stdio.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>

void alarm_handler(int signo);

int counter = 0;

int main(void)
{
  struct itimerval delay;
  int ret;

  signal(SIGALRM, alarm_handler);

  delay.it_value.tv_sec = 1;
  delay.it_value.tv_usec = 0;
  delay.it_interval.tv_sec = 1;
  delay.it_interval.tv_usec = 0;
  ret = setitimer(ITIMER_REAL, &delay, NULL);
  if(ret){
    perror("setitimer");
    return;
  }

  while(1){
    pause();
    printf("counter : %d\n", counter);
  }
}

void alarm_handler(int signo)
{
  counter++;
}