URI: 
       uptime.c - ubase - suckless linux base utils
  HTML git clone git://git.suckless.org/ubase
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR 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_sec);
           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 }