source: MondoRescue/branches/3.3/mindi-busybox/procps/uptime.c@ 3782

Last change on this file since 3782 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 2.8 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Mini uptime implementation for busybox
4 *
5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6 *
7 * Licensed under GPLv2, see file LICENSE in this source tree.
8 */
9
10/* 2011 Pere Orga <gotrunks@gmail.com>
11 *
12 * Added FEATURE_UPTIME_UTMP_SUPPORT flag.
13 */
14
15/* getopt not needed */
16
17//config:config UPTIME
18//config: bool "uptime"
19//config: default y
20//config: select PLATFORM_LINUX #sysinfo()
21//config: help
22//config: uptime gives a one line display of the current time, how long
23//config: the system has been running, how many users are currently logged
24//config: on, and the system load averages for the past 1, 5, and 15 minutes.
25//config:
26//config:config FEATURE_UPTIME_UTMP_SUPPORT
27//config: bool "Support for showing the number of users"
28//config: default y
29//config: depends on UPTIME && FEATURE_UTMP
30//config: help
31//config: Makes uptime display the number of users currently logged on.
32
33//usage:#define uptime_trivial_usage
34//usage: ""
35//usage:#define uptime_full_usage "\n\n"
36//usage: "Display the time since the last boot"
37//usage:
38//usage:#define uptime_example_usage
39//usage: "$ uptime\n"
40//usage: " 1:55pm up 2:30, load average: 0.09, 0.04, 0.00\n"
41
42#include "libbb.h"
43#ifdef __linux__
44# include <sys/sysinfo.h>
45#endif
46
47
48#ifndef FSHIFT
49# define FSHIFT 16 /* nr of bits of precision */
50#endif
51#define FIXED_1 (1 << FSHIFT) /* 1.0 as fixed-point */
52#define LOAD_INT(x) (unsigned)((x) >> FSHIFT)
53#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1 - 1)) * 100)
54
55
56int uptime_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
57int uptime_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
58{
59 unsigned updays, uphours, upminutes;
60 struct sysinfo info;
61 struct tm *current_time;
62 time_t current_secs;
63
64 time(&current_secs);
65 current_time = localtime(&current_secs);
66
67 sysinfo(&info);
68
69 printf(" %02u:%02u:%02u up ",
70 current_time->tm_hour, current_time->tm_min, current_time->tm_sec);
71 updays = (unsigned) info.uptime / (unsigned)(60*60*24);
72 if (updays)
73 printf("%u day%s, ", updays, (updays != 1) ? "s" : "");
74 upminutes = (unsigned) info.uptime / (unsigned)60;
75 uphours = (upminutes / (unsigned)60) % (unsigned)24;
76 upminutes %= 60;
77 if (uphours)
78 printf("%2u:%02u", uphours, upminutes);
79 else
80 printf("%u min", upminutes);
81
82#if ENABLE_FEATURE_UPTIME_UTMP_SUPPORT
83 {
84 struct utmpx *ut;
85 unsigned users = 0;
86 while ((ut = getutxent()) != NULL) {
87 if ((ut->ut_type == USER_PROCESS) && (ut->ut_user[0] != '\0'))
88 users++;
89 }
90 printf(", %u users", users);
91 }
92#endif
93
94 printf(", load average: %u.%02u, %u.%02u, %u.%02u\n",
95 LOAD_INT(info.loads[0]), LOAD_FRAC(info.loads[0]),
96 LOAD_INT(info.loads[1]), LOAD_FRAC(info.loads[1]),
97 LOAD_INT(info.loads[2]), LOAD_FRAC(info.loads[2]));
98
99 return EXIT_SUCCESS;
100}
Note: See TracBrowser for help on using the repository browser.