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

struct timeval t;
double now,later;

void handler(int sig)
{
    if (gettimeofday(&t,NULL)) {
	perror("gettimeofday");
	exit(1);
    }
    later=t.tv_sec+t.tv_usec/1E9;
    printf("Awakened (after %d secs.)\n",(int)round((later-now)));
}

int main(int argc, char *argv[])
{
    int s;

    if (argc!=2 || (s=atoi(argv[1]))<0) {
	fprintf(stderr,"Usage:\n\t%s <secs>\n",argv[0]);
	exit(1);
    }

    signal(SIGALRM,handler);
    s=atoi(argv[1]);
    
    if (gettimeofday(&t,NULL)) {
	perror("gettimeofday");
	exit(1);
    }
    now=t.tv_sec+t.tv_usec/1E9;

    if (alarm(s)<0) {
	perror("alarm");
	exit(1);
    }
    pause();
}