# include # include # include # include static jmp_buf jbuf; void catchalarm() { longjmp(jbuf, 1); } fsleep(interval) float interval; /* time in seconds */ /* * Floating point sleep: sleep for 'interval' seconds, * including fractional part. Precise to microsecond, * accurate only to system clock rate. * `Note:` Depends on 4.2bsd. */ { extern void catchalarm(); struct itimerval val, oval; register long tmp; signal(SIGALRM, catchalarm); if (setjmp(jbuf)) return; val.it_interval.tv_sec = 0; val.it_interval.tv_usec = 0; val.it_value.tv_sec = tmp = interval; val.it_value.tv_usec = (interval - tmp) * 1000000.0; setitimer(ITIMER_REAL, &val, &oval); pause(); } /* * main(argc, argv) * char **argv; * { * extern char *ctime(); * struct timeval timeval; * struct timezone timezone; * printf("!\n"); * if (argc > 1) { * gettimeofday(&timeval, &timezone); * printf(ctime(&timeval.tv_sec)); * isleep(atof(argv[1])); * gettimeofday(&timeval, &timezone); * printf(ctime(&timeval.tv_sec)); * } * } */