1*18339Sserge /* @(#)ualarm.c 1.1 (Berkeley) 03/14/85 */ 2*18339Sserge 3*18339Sserge #include <sys/time.h> 4*18339Sserge 5*18339Sserge #define USPS 1000000 /* # of microseconds in a second */ 6*18339Sserge 7*18339Sserge /* 8*18339Sserge * Generate a SIGALRM signal in ``usecs'' microseconds. 9*18339Sserge * If ``reload'' is non-zero, keep generating SIGALRM 10*18339Sserge * every ``reload'' microseconds after the first signal. 11*18339Sserge */ 12*18339Sserge unsigned 13*18339Sserge ualarm(usecs, reload) 14*18339Sserge register unsigned usecs; 15*18339Sserge register unsigned reload; 16*18339Sserge { 17*18339Sserge struct itimerval new, old; 18*18339Sserge 19*18339Sserge new.it_interval.tv_usec = reload % USPS; 20*18339Sserge new.it_interval.tv_sec = reload / USPS; 21*18339Sserge 22*18339Sserge new.it_value.tv_usec = usecs % USPS; 23*18339Sserge new.it_value.tv_sec = usecs / USPS; 24*18339Sserge 25*18339Sserge if (setitimer(ITIMER_REAL, &new, &old) == 0) 26*18339Sserge return (old.it_value.tv_sec * USPS + old.it_value.tv_usec); 27*18339Sserge /* else */ 28*18339Sserge return (-1); 29*18339Sserge } 30