From c31d941cb0c284ba137e54ee5cc7a7c08c0e5023 Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Thu, 4 Oct 1979 05:34:45 -0800 Subject: [PATCH] BSD 3 development Work on file usr/src/cmd/uptime.c Synthesized-from: 3bsd --- usr/src/cmd/uptime.c | 101 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 usr/src/cmd/uptime.c diff --git a/usr/src/cmd/uptime.c b/usr/src/cmd/uptime.c new file mode 100644 index 0000000000..ea73021274 --- /dev/null +++ b/usr/src/cmd/uptime.c @@ -0,0 +1,101 @@ +#include +#include +#include +#include + +struct tm *localtime(); + +#define DIV60(t) ((t+30)/60) /* x/60 rounded */ + +struct nlist nl[] = { +#define X_BOOTIME 0 + { "_bootime" }, +#define X_AVENRUN 1 + { "_avenrun" }, + { 0 } +}; + +time_t now, bootime; +double avenrun[3]; + +int kmem; + +main(argc, argv) + char **argv; +{ + char obuf[BUFSIZ]; + register int i, days; + register time_t uptime; + register struct tm *nowt; + + setbuf(stdout, obuf); + nlist("/vmunix" , nl); + if (nl[0].n_value == 0) { + fprintf(stderr, "No namelist\n"); + exit(1); + } + kmem = open("/dev/kmem", 0); + if (kmem < 0) { + fprintf(stderr ,"No kmem\n"); + exit(1); + } + time(&now); + nowt = localtime(&now); + prtat(nowt); + lseek(kmem, (long)nl[X_BOOTIME].n_value, 0); + read(kmem, &bootime, sizeof (bootime)); + uptime = now - bootime; + printf(" up"); + days = uptime / (60*60*24); + if (days > 0) { + printf(" %d day%s, ", days, days>1?"s":""); + uptime %= (60*60*24); + } + prttime(DIV60(uptime), ""); + printf("\t\t"); + printf("load average:"); + lseek(kmem, (long)nl[X_AVENRUN].n_value, 0); + read(kmem, avenrun, sizeof(avenrun)); + for (i = 0; i < 3; i++) { + printf(" %.2f", avenrun[i]); + if (i < 2) + printf(","); + } + printf("\n"); +} + +prttime(tim, tail) + time_t tim; + char *tail; +{ + register int didhrs = 0; + + if (tim >= 60) { + printf("%3d:", tim/60); + didhrs++; + } else { + printf(" "); + } + tim %= 60; + if (tim > 0 || didhrs) { + printf(didhrs&&tim<10 ? "%02d" : "%2d", tim); + } else { + printf(" "); + } + printf("%s", tail); +} + +/* prtat prints a 12 hour time given a pointer to a time of day */ +prtat(p) + struct tm *p; +{ + register int t, pm; + + t = p -> tm_hour; + pm = (t > 11); + if (t > 11) + t -= 12; + if (t == 0) + t = 12; + prttime(t*60 + p->tm_min, pm ? "pm" : "am"); +} -- 2.20.1