|
cvsdist |
9592a4a |
--- netkit-rusers-0.17/rpc.rstatd/GNUmakefile.procps 2004-07-12 17:41:48.179608944 +0200
|
|
cvsdist |
9592a4a |
+++ netkit-rusers-0.17/rpc.rstatd/GNUmakefile 2004-07-12 17:41:48.190607585 +0200
|
|
cvsdist |
9592a4a |
@@ -6,10 +6,6 @@
|
|
cvsdist |
9592a4a |
CFLAGS += -DGNU_LIBC -D_GNU_SOURCE
|
|
cvsdist |
9592a4a |
endif
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
-#LIBS += -lproc
|
|
cvsdist |
9592a4a |
-# XXX FIXME!
|
|
cvsdist |
9592a4a |
-LIBS += /lib/$(shell cd /lib && echo libproc.so.*)
|
|
cvsdist |
9592a4a |
-
|
|
cvsdist |
9592a4a |
RPCGEN=rpcgen
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
# Warning, do not put this in the current directory without updating
|
|
cvsdist |
9592a4a |
--- netkit-rusers-0.17/rpc.rstatd/rstat_proc.c.procps 2004-07-12 17:41:48.174609561 +0200
|
|
cvsdist |
9592a4a |
+++ netkit-rusers-0.17/rpc.rstatd/rstat_proc.c 2004-07-12 17:55:36.605332290 +0200
|
|
cvsdist |
9592a4a |
@@ -45,6 +45,7 @@
|
|
cvsdist |
9592a4a |
#include <string.h>
|
|
cvsdist |
9592a4a |
#include <signal.h>
|
|
cvsdist |
9592a4a |
#include <fcntl.h>
|
|
cvsdist |
9592a4a |
+#include <locale.h>
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
#include <limits.h>
|
|
cvsdist |
9592a4a |
#include <rpc/rpc.h>
|
|
cvsdist |
9592a4a |
@@ -596,27 +597,71 @@
|
|
cvsdist |
9592a4a |
#define _DELTA(_x, _i) ( (_x)[(_i)] )
|
|
cvsdist |
9592a4a |
#endif
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
-extern int uptime(double *, double *);
|
|
cvsdist |
9592a4a |
-extern void loadavg(double *, double *, double *);
|
|
cvsdist |
9592a4a |
-
|
|
cvsdist |
9592a4a |
static void
|
|
cvsdist |
9592a4a |
convert_stats(void)
|
|
cvsdist |
9592a4a |
{
|
|
cvsdist |
9592a4a |
static int tog = 0;
|
|
cvsdist |
9592a4a |
double up;
|
|
cvsdist |
9592a4a |
int i;
|
|
cvsdist |
9592a4a |
+ int fd;
|
|
cvsdist |
9592a4a |
+ static char buf[1024];
|
|
cvsdist |
9592a4a |
+ char *savelocale;
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
hz = sysconf(_SC_CLK_TCK);
|
|
cvsdist |
9592a4a |
gettimeofday(&tm, (struct timezone *) 0);
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
- i = uptime(&up, NULL);
|
|
cvsdist |
9592a4a |
+ fd = open("/proc/uptime", O_RDONLY);
|
|
cvsdist |
9592a4a |
+ if (fd == -1) {
|
|
cvsdist |
9592a4a |
+ fprintf(stderr, "Error opening /proc/uptime, please make sure /proc is mounted.\n");
|
|
cvsdist |
9592a4a |
+ exit(1);
|
|
cvsdist |
9592a4a |
+ }
|
|
cvsdist |
9592a4a |
+
|
|
cvsdist |
9592a4a |
+ i = read(fd, buf, sizeof(buf) - 1);
|
|
cvsdist |
9592a4a |
+ if (i < 0) {
|
|
cvsdist |
9592a4a |
+ perror("/proc/uptime");
|
|
cvsdist |
9592a4a |
+ close(fd);
|
|
cvsdist |
9592a4a |
+ exit(1);
|
|
cvsdist |
9592a4a |
+ }
|
|
cvsdist |
9592a4a |
+ buf[i] = '\0';
|
|
cvsdist |
9592a4a |
+ savelocale = setlocale(LC_NUMERIC, NULL);
|
|
cvsdist |
9592a4a |
+ setlocale(LC_NUMERIC, "C");
|
|
cvsdist |
9592a4a |
+ if (sscanf(buf, "%lf", &up) < 1) {
|
|
cvsdist |
9592a4a |
+ fprintf(stderr, "bad data in /proc/uptime\n");
|
|
cvsdist |
9592a4a |
+ exit(1);
|
|
cvsdist |
9592a4a |
+ }
|
|
cvsdist |
9592a4a |
+ setlocale(LC_NUMERIC, savelocale);
|
|
cvsdist |
9592a4a |
+ close(fd);
|
|
cvsdist |
9592a4a |
+
|
|
cvsdist |
9592a4a |
+ i = (int)up;
|
|
cvsdist |
9592a4a |
+
|
|
cvsdist |
9592a4a |
btm.tv_sec = tm.tv_sec - i;
|
|
cvsdist |
9592a4a |
btm.tv_usec = 0;
|
|
cvsdist |
9592a4a |
up -= i;
|
|
cvsdist |
9592a4a |
if (up > 0)
|
|
cvsdist |
9592a4a |
btm.tv_usec = 1000000 * up;
|
|
cvsdist |
9592a4a |
|
|
cvsdist |
9592a4a |
- loadavg(&avrun[0], &avrun[1], &avrun[2]);
|
|
cvsdist |
9592a4a |
+ fd = open("/proc/loadavg", O_RDONLY);
|
|
cvsdist |
9592a4a |
+ if (fd == -1) {
|
|
cvsdist |
9592a4a |
+ fprintf(stderr, "Error opening /proc/loadavg, please make sure /proc is mounted.\n");
|
|
cvsdist |
9592a4a |
+ exit(1);
|
|
cvsdist |
9592a4a |
+ }
|
|
cvsdist |
9592a4a |
+
|
|
cvsdist |
9592a4a |
+ i = read(fd, buf, sizeof(buf) - 1);
|
|
cvsdist |
9592a4a |
+ if (i < 0) {
|
|
cvsdist |
9592a4a |
+ perror("/proc/loadavg");
|
|
cvsdist |
9592a4a |
+ close(fd);
|
|
cvsdist |
9592a4a |
+ exit(1);
|
|
cvsdist |
9592a4a |
+ }
|
|
cvsdist |
9592a4a |
+ buf[i] = '\0';
|
|
cvsdist |
9592a4a |
+ savelocale = setlocale(LC_NUMERIC, NULL);
|
|
cvsdist |
9592a4a |
+ setlocale(LC_NUMERIC, "C");
|
|
cvsdist |
9592a4a |
+ if (sscanf(buf, "%lf %lf %lf", &avrun[0], &avrun[1], &avrun[2]) < 3) {
|
|
cvsdist |
9592a4a |
+ fprintf(stderr, "bad data in /proc/loadavg\n");
|
|
cvsdist |
9592a4a |
+ exit(1);
|
|
cvsdist |
9592a4a |
+ }
|
|
cvsdist |
9592a4a |
+ setlocale(LC_NUMERIC, savelocale);
|
|
cvsdist |
9592a4a |
+ close(fd);
|
|
cvsdist |
9592a4a |
+
|
|
cvsdist |
9592a4a |
getstat(cpu_use+tog,cpu_nic+tog,cpu_sys+tog,cpu_idl+tog,
|
|
cvsdist |
9592a4a |
pgpgin+tog,pgpgout+tog,pswpin+tog,pswpout+tog,
|
|
cvsdist |
9592a4a |
inter+tog,ticks+tog,ctxt+tog, disk+tog);
|