2 * (c) Copyright 1998-2001 by Rob Braun
3 * All rights reserved. The file named COPYRIGHT specifies the terms
4 * and conditions for redistribution.
6 /* This file contains OS dependant implementations of xgetloadavg().
7 * xgetloadavg takes no arguments and simply returns the 1 minute
8 * load average of the machine as a double.
9 * Feel free to add implementations here, please update configure.in
10 * to define HAVE_LOADAVG. Defining this macro enables the option
11 * in the rest of the code.
20 #include "xgetloadavg.h"
22 #define LFILE "/proc/loadavg"
25 double xgetloadavg(void)
30 fd = fopen(LFILE, "r");
35 if( fscanf(fd, "%lf", &ret) != 1 ) {
51 double xgetloadavg(void)
53 kstat_ctl_t *kc = NULL;
55 kstat_named_t *kn = NULL;
62 ks = kstat_lookup(kc, "unix", 0, "system_misc");
67 if( kstat_read(kc, ks, 0) == -1 ) {
71 kn = kstat_data_lookup(ks, "avenrun_1min");
76 if( ks->ks_type == KSTAT_TYPE_NAMED ) {
82 return (double)(kn->value.ui32)/100;
87 #endif /* HAVE_KSTAT */
92 #include <sys/param.h>
93 #include <sys/fcntl.h>
99 getloadavg (ret, sizeof (ret) / sizeof (ret[0]));
103 #endif /* __FreeBSD__ */
106 #if defined(bsdi) || defined(__APPLE__)
109 double xgetloadavg(void)
113 if (getloadavg(loadavg, 1) == -1)
122 #endif /* bsdi || __APPLE__ */
126 #include <sys/table.h>
128 double xgetloadavg(void)
130 struct tbl_loadavg labuf;
132 if (table(TBL_LOADAVG, 0, &labuf, 1, sizeof(labuf)) < 0) {
133 perror("TBL_LOADAVG");
137 if (labuf.tl_lscale) {
138 return ((double)labuf.tl_avenrun.l[2] /
139 (double)labuf.tl_lscale);
142 return (labuf.tl_avenrun.d[2]);
146 #endif /* HAVE_LOADAVG */