rendered paste body/* gcc -o hog hog.c */#define _GNU_SOURCE#include <errno.h>#include <err.h>#include <time.h>#include <stdio.h>#include <sched.h>#include <limits.h>#include <stdlib.h>#ifdef __sun__#define _POSIX_PTHREAD_SEMANTICS 1#endif#include <signal.h>#include <sys/time.h>#define HIST 10static sig_atomic_t stop;static void sighandler (int signr){ (void) signr; stop = 1;}static unsigned long hog (unsigned long niters){ stop = 0; while (!stop && --niters) ; return niters;}int main (void){ unsigned int i; struct itimerval it; struct sigaction act; sigset_t set; unsigned long v[HIST]; double tmp = 0.0; unsigned long n; it.it_interval.tv_sec = 0; it.it_interval.tv_usec = 1; it.it_value.tv_sec = 0; it.it_value.tv_usec = 1; act.sa_handler = sighandler; sigemptyset (&act.sa_mask); sigaddset (&act.sa_mask, SIGALRM); act.sa_flags = 0; if (sigaction (SIGALRM, &act, NULL)) {#ifdef __sun__ fprintf(stderr, "failed to set signal handler"); exit(1);#else err (EXIT_FAILURE, "failed to set signal handler");#endif } if (setitimer (ITIMER_REAL, &it, NULL)) {#ifdef __sun__ fprintf(stderr,"failed to set interval timer"); exit(1);#else err (EXIT_FAILURE, "failed to set interval timer");#endif } for (i = 0; i < HIST; ++i) { v[i] = ULONG_MAX - hog (ULONG_MAX); } for (i = 0; i < HIST; ++i) { printf ("%d = %ld\n", i, v[i]); tmp += v[i]; } tmp /= HIST; n = tmp - (tmp / 3); if (sigemptyset (&set)) {#ifdef __sun__ fprintf( stderr, "failed to empty sigset"); exit(1);#else err (EXIT_FAILURE, "failed to empty sigset");#endif } if (sigaddset (&set, SIGALRM)) {#ifdef __sun__ fprintf(stderr, "failed to add to sigset"); exit(1);#else err (EXIT_FAILURE, "failed to add to sigset");#endif } for (;;) { int signr; hog (n); if (sigwait (&set, &signr)) {#ifdef __sun__ fprintf(stderr, "failed to wait for a signal"); exit(1);#else err (EXIT_FAILURE, "failed to wait for a signal");#endif } } return 0;}