[comp.unix.ultrix] Load Averages from ULTRIX?

jwabik@uc.msc.umn.edu (Jeff Wabik) (11/28/90)

Does anyone know how to retrieve load averages from Ultrix?   There
doesn't seem to be a system call for it.  A detailed description or
hunk of code would be greatly appreciated.

Thanks!

	-Jeff

mogul@wrl.dec.com (Jeffrey Mogul) (12/05/90)

In article <3024@uc.msc.umn.edu> jwabik@uc.msc.umn.edu (Jeff Wabik) writes:
>
>Does anyone know how to retrieve load averages from Ultrix?   There
>doesn't seem to be a system call for it.  A detailed description or
>hunk of code would be greatly appreciated.

Here's some code to do what you want.  It's not quite an explanation,
but with some thought you should be able to understand what is going
on.  Note that a lot more error checking could (should) be done, in a
real application.

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  loadavg.c makefile
# Wrapped by mogul@jove.pa.dec.com on Tue Dec  4 18:02:09 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'loadavg.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'loadavg.c'\"
else
echo shar: Extracting \"'loadavg.c'\" \(748 characters\)
sed "s/^X//" >'loadavg.c' <<'END_OF_FILE'
X/*
X * Example derived by Jeffrey Mogul/DECWRL from
X * 	loadst -- print current time and load statistics.
X *				-- James Gosling @ CMU, May 1981
X */
X#include <nlist.h>
X#ifdef	mips
X#include <sys/fixpoint.h>
X#endif	mips
X
struct nlist    nl[] = {     { "_avenrun" },     { 0 } };
X
main()
X{
X	int kmem;
X#ifdef	mips
X	fix   avenrun[3];
X#else
X	double   avenrun[3];
X#endif	mips
X    
X	if ((kmem = open ("/dev/kmem", 0)) < 0) {
X	    perror("/dev/kmem");
X	    exit (1);
X	}
X	nlist ("/vmunix", nl);
X
X	lseek (kmem, (long) nl[0].n_value, 0);
X	read (kmem, avenrun, sizeof (avenrun));
X	printf ("%.2f, %.2f, %.2f\n",
X#ifdef	mips
X			FIX_TO_DBL(avenrun[0]), FIX_TO_DBL(avenrun[1]),
X			FIX_TO_DBL(avenrun[2]));
X#else
X			avenrun[0], avenrun[1], avenrun[2]);
X#endif	mips
X}
END_OF_FILE
if test 748 -ne `wc -c <'loadavg.c'`; then
    echo shar: \"'loadavg.c'\" unpacked with wrong size!
fi
# end of 'loadavg.c'
fi
if test -f 'makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makefile'\"
else
echo shar: Extracting \"'makefile'\" \(94 characters\)
sed "s/^X//" >'makefile' <<'END_OF_FILE'
loadavg: loadavg.o
X	cc -o loadavg loadavg.o
X
clean:
X	rm -f loadavg core *.o a.out *.BAK *.CKP
END_OF_FILE
if test 94 -ne `wc -c <'makefile'`; then
    echo shar: \"'makefile'\" unpacked with wrong size!
fi
# end of 'makefile'
fi
echo shar: End of shell archive.
exit 0