uptime.c - ubase - suckless linux base utils | |
git clone git://git.suckless.org/ubase | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
uptime.c (1454B) | |
--- | |
1 /* See LICENSE file for copyright and license details. */ | |
2 #include <sys/sysinfo.h> | |
3 | |
4 #include <stdio.h> | |
5 #include <stdlib.h> | |
6 #include <string.h> | |
7 #include <time.h> | |
8 #include <utmpx.h> | |
9 | |
10 #include "config.h" | |
11 #include "util.h" | |
12 | |
13 static void | |
14 usage(void) | |
15 { | |
16 eprintf("usage: %s\n", argv0); | |
17 } | |
18 | |
19 int | |
20 main(int argc, char *argv[]) | |
21 { | |
22 struct utmpx utx; | |
23 FILE *ufp; | |
24 struct sysinfo info; | |
25 time_t tmptime; | |
26 struct tm *now; | |
27 unsigned int days, hours, minutes; | |
28 int nusers = 0; | |
29 size_t n; | |
30 | |
31 ARGBEGIN { | |
32 default: | |
33 usage(); | |
34 } ARGEND; | |
35 | |
36 if (sysinfo(&info) < 0) | |
37 eprintf("sysinfo:"); | |
38 time(&tmptime); | |
39 now = localtime(&tmptime); | |
40 printf(" %02d:%02d:%02d up ", now->tm_hour, now->tm_min, now->tm… | |
41 info.uptime /= 60; | |
42 minutes = info.uptime % 60; | |
43 info.uptime /= 60; | |
44 hours = info.uptime % 24; | |
45 days = info.uptime / 24; | |
46 if (days) | |
47 printf("%d day%s, ", days, days != 1 ? "s" : ""); | |
48 if (hours) | |
49 printf("%2d:%02d, ", hours, minutes); | |
50 else | |
51 printf("%d min, ", minutes); | |
52 | |
53 if ((ufp = fopen(UTMP_PATH, "r"))) { | |
54 while ((n = fread(&utx, sizeof(utx), 1, ufp)) > 0) { | |
55 if (!utx.ut_user[0]) | |
56 continue; | |
57 if (utx.ut_type != USER_PROCESS) | |
58 continue; | |
59 nusers++; | |
60 } | |
61 if (ferror(ufp)) | |
62 eprintf("%s: read error:", UTMP_PATH); | |
63 fclose(ufp); | |
64 printf(" %d user%s, ", nusers, nusers != 1 ? "s" : ""); | |
65 } | |
66 | |
67 printf(" load average: %.02f, %.02f, %.02f\n", | |
68 info.loads[0] / 65536.0f, | |
69 info.loads[1] / 65536.0f, | |
70 info.loads[2] / 65536.0f); | |
71 | |
72 return 0; | |
73 } |