1 #include <u.h> 2 #include <libc.h> 3 4 static uvlong order = 0x0001020304050607ULL; 5 6 static void 7 be2vlong(vlong *to, uchar *f) 8 { 9 uchar *t, *o; 10 int i; 11 12 t = (uchar*)to; 13 o = (uchar*)ℴ 14 for(i = 0; i < sizeof order; i++) 15 t[o[i]] = f[i]; 16 } 17 18 vlong 19 nsec(void) 20 { 21 static int fd = -1; 22 uchar b[8]; 23 vlong t; 24 int opened; 25 26 opened = 0; 27 if(fd < 0){ 28 reopen: 29 if(opened++ || (fd = open("/dev/bintime", OREAD|OCEXEC)) < 0) 30 return 0; 31 } 32 if(pread(fd, b, sizeof b, 0) != sizeof b){ 33 close(fd); 34 fd = -1; 35 goto reopen; 36 } 37 be2vlong(&t, b); 38 return t; 39 } 40