time.c - 9base - revived minimalist port of Plan 9 userland to Unix
(HTM) git clone git://git.suckless.org/9base
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
time.c (920B)
---
1 #include <u.h>
2 #include <sys/time.h>
3 #include <time.h>
4 #include <sys/resource.h>
5 #define NOPLAN9DEFINES
6 #include <libc.h>
7
8 long
9 p9times(long *t)
10 {
11 struct rusage ru, cru;
12
13 if(getrusage(0, &ru) < 0 || getrusage(-1, &cru) < 0)
14 return -1;
15
16 t[0] = ru.ru_utime.tv_sec*1000 + ru.ru_utime.tv_usec/1000;
17 t[1] = ru.ru_stime.tv_sec*1000 + ru.ru_stime.tv_usec/1000;
18 t[2] = cru.ru_utime.tv_sec*1000 + cru.ru_utime.tv_usec/1000;
19 t[3] = cru.ru_stime.tv_sec*1000 + cru.ru_stime.tv_usec/1000;
20
21 /* BUG */
22 return t[0]+t[1]+t[2]+t[3];
23 }
24
25 double
26 p9cputime(void)
27 {
28 long t[4];
29 double d;
30
31 if(p9times(t) < 0)
32 return -1.0;
33
34 d = (double)t[0]+(double)t[1]+(double)t[2]+(double)t[3];
35 return d/1000.0;
36 }
37
38 vlong
39 p9nsec(void)
40 {
41 struct timeval tv;
42
43 if(gettimeofday(&tv, 0) < 0)
44 return -1;
45
46 return (vlong)tv.tv_sec*1000*1000*1000 + tv.tv_usec*1000;
47 }
48
49 long
50 p9time(long *tt)
51 {
52 long t;
53 t = time(0);
54 if(tt)
55 *tt = t;
56 return t;
57 }
58