// timebase_demo.c
   
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <mach/mach.h>
#include <mach/mach_time.h>
   
#define DEFAULT_SLEEP_TIME 1
#define MAXIMUM_SLEEP_TIME 60
   
int
main(int argc, char **argv)
{
    kern_return_t kr;
    u_int64_t     t1, t2, diff;
    double        abs2clock;
    int           sleeptime = DEFAULT_SLEEP_TIME;
   
    mach_timebase_info_data_t info;
   
    kr = mach_timebase_info(&info);
    if (kr != KERN_SUCCESS) {
        mach_error("mach_timebase_info:", kr);
        exit(kr);
    }
   
    if (argc == 2) {
        sleeptime = atoi(argv[1]);
        if ((sleeptime < 0) || (sleeptime > MAXIMUM_SLEEP_TIME))
            sleeptime = DEFAULT_SLEEP_TIME;
    } 
   
    t1 = mach_absolute_time();
    sleep(sleeptime);
    t2 = mach_absolute_time();
    diff = t2 - t1;
   
    printf("slept for %d seconds of clock time\n", sleeptime);
    printf("TB increments = %llu increments\n", diff);
    printf("absolute-to-clock conversion factor = (%u/%u) ns/increment\n",
           info.numer, info.denom);
    printf("sleeping time according to TB\n");
   
    abs2clock = (double)info.numer/(double)info.denom;
    abs2clock *= (double)diff;
   
    printf("\t= %llu increments x (%u/%u) ns/increment\n\t= %f ns\n\t= %f s\n",
           diff, info.numer, info.denom,
           abs2clock, abs2clock/(double)1000000000);
   
    exit(0);
}

haidragondeMacBook-Pro:7-41 haidragon$ gcc -Wall -o timebase_demo timebase_demo.c 
haidragondeMacBook-Pro:7-41 haidragon$ ls
timebase_demo	timebase_demo.c
haidragondeMacBook-Pro:7-41 haidragon$ ./timebase_demo
slept for 1 seconds of clock time
TB increments = 1002722462 increments
absolute-to-clock conversion factor = (1/1) ns/increment
sleeping time according to TB
	= 1002722462 increments x (1/1) ns/increment
	= 1002722462.000000 ns
	= 1.002722 s
haidragondeMacBook-Pro:7-41 haidragon$ ./timebase_demo 5
slept for 5 seconds of clock time
TB increments = 5003092227 increments
absolute-to-clock conversion factor = (1/1) ns/increment
sleeping time according to TB
	= 5003092227 increments x (1/1) ns/increment
	= 5003092227.000000 ns
	= 5.003092 s
haidragondeMacBook-Pro:7-41 haidragon$