All pastes #479274 Raw Edit

Stuff

public c v1 · immutable
·published 2007-05-09 17:22 UTC
rendered paste body
/* gcc -o hog hog.c */#define _GNU_SOURCE#ifdef __sun__#include <errno.h>#else#include <err.h>#endif#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;    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;    if (signal (SIGALRM, &sighandler)) {#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;}