Back to index

glibc  2.9
Defines | Functions
tst-timer.c File Reference
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>

Go to the source code of this file.

Defines

#define ZSIGALRM   14

Functions

static void notify_func1 (union sigval sigval)
static void notify_func2 (union sigval sigval)
static void signal_func (int sig)
static void intr_sleep (int sec)
int main (void)

Define Documentation

#define ZSIGALRM   14

Definition at line 62 of file tst-timer.c.


Function Documentation

static void intr_sleep ( int  sec) [static]

Definition at line 51 of file tst-timer.c.

{
  struct timespec ts;

  ts.tv_sec = sec;
  ts.tv_nsec = 0;

  while (nanosleep (&ts, &ts) == -1 && errno == EINTR)
    ;
}

Here is the caller graph for this function:

int main ( void  )

Definition at line 66 of file tst-timer.c.

{
  struct timespec ts;
  timer_t timer_sig, timer_thr1, timer_thr2;
  int retval;
  struct sigevent sigev1 =
  {
    .sigev_notify = SIGEV_SIGNAL,
    .sigev_signo = ZSIGALRM
  };
  struct sigevent sigev2;
  struct itimerspec itimer1 = { { 0, 200000000 }, { 0, 200000000 } };
  struct itimerspec itimer2 = { { 0, 100000000 }, { 0, 500000000 } };
  struct itimerspec itimer3 = { { 0, 150000000 }, { 0, 300000000 } };
  struct itimerspec old;

  retval = clock_gettime (CLOCK_REALTIME, &ts);

  sigev2.sigev_notify = SIGEV_THREAD;
  sigev2.sigev_notify_function = notify_func1;
  sigev2.sigev_notify_attributes = NULL;
  /* It is unnecessary to do the following but to set a good example
     we do it anyhow.  */
  sigev2.sigev_value.sival_ptr = NULL;

  setvbuf (stdout, 0, _IOLBF, 0);

  printf ("clock_gettime returned %d, timespec = { %ld, %ld }\n",
         retval, ts.tv_sec, ts.tv_nsec);

  retval = clock_getres (CLOCK_REALTIME, &ts);

  printf ("clock_getres returned %d, timespec = { %ld, %ld }\n",
         retval, ts.tv_sec, ts.tv_nsec);

  if (timer_create (CLOCK_REALTIME, &sigev1, &timer_sig) != 0)
    {
      printf ("timer_create for timer_sig failed: %m\n");
      exit (1);
    }
  if (timer_create (CLOCK_REALTIME, &sigev2, &timer_thr1) != 0)
    {
      printf ("timer_create for timer_thr1 failed: %m\n");
      exit (1);
    }
  sigev2.sigev_notify_function = notify_func2;
  if (timer_create (CLOCK_REALTIME, &sigev2, &timer_thr2) != 0)
    {
      printf ("timer_create for timer_thr2 failed: %m\n");
      exit (1);
    }

  if (timer_settime (timer_thr1, 0, &itimer2, &old) != 0)
    {
      printf ("timer_settime for timer_thr1 failed: %m\n");
      exit (1);
    }
  if (timer_settime (timer_thr2, 0, &itimer3, &old) != 0)
    {
      printf ("timer_settime for timer_thr2 failed: %m\n");
      exit (1);
    }

  signal (ZSIGALRM, signal_func);

  if (timer_settime (timer_sig, 0, &itimer1, &old) != 0)
    {
      printf ("timer_settime for timer_sig failed: %m\n");
      exit (1);
    }

  intr_sleep (3);

  if (timer_delete (timer_sig) != 0)
    {
      printf ("timer_delete for timer_sig failed: %m\n");
      exit (1);
    }
  if (timer_delete (timer_thr1) != 0)
    {
      printf ("timer_delete for timer_thr1 failed: %m\n");
      exit (1);
    }

  intr_sleep (3);

  if (timer_delete (timer_thr2) != 0)
    {
      printf ("timer_delete for timer_thr2 failed: %m\n");
      exit (1);
    }

  return 0;
}

Here is the call graph for this function:

static void notify_func1 ( union sigval  sigval) [static]

Definition at line 29 of file tst-timer.c.

{
  puts ("notify_func1");
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void notify_func2 ( union sigval  sigval) [static]

Definition at line 36 of file tst-timer.c.

{
  puts ("notify_func2");
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void signal_func ( int  sig) [static]

Definition at line 43 of file tst-timer.c.

{
  static const char text[] = "signal_func\n";
  signal (sig, signal_func);
  write (STDOUT_FILENO, text, sizeof text - 1);
}

Here is the call graph for this function:

Here is the caller graph for this function: