V10/cmd/load/load.c
/*
* Print the system load average,
* and the time of day.
*/
#include <stdio.h>
#include <nlist.h>
struct nlist nl[] = {
{"_avenrun"},
{0}
};
double avenrun[3];
main(argc,argv)
char **argv;
{
register int i,kmem;
long maddr;
long t;
int count = -1, interval = 0;
register char *dunix = "/unix", *dkmem = "/dev/kmem";
extern char _sobuf[BUFSIZ];
setbuf (stdout, _sobuf);
switch (argc) {
case 5:
dkmem = argv[4];
/* no break */
case 4:
dunix = argv[3];
case 3:
count = atoi (argv[2]);
case 2:
interval = atoi (argv[1]);
case 1:
break;
default:
err("usage: load [interval [count [/unix [/dev/kmem]]]]");
}
nlist(dunix, nl);
if (nl[0].n_type==0) err("no namelist");
if ((kmem=open(dkmem,0))<0) err("no kmem");
if (0==strcmp(dkmem,"/dev/kmem")) maddr=0;
else maddr=0x80000000;
time (&t);
printf (" 1m 5m 15m\n");
do {
register int i;
kseek(kmem,nl[0].n_value,0,maddr);
kread(kmem,avenrun,sizeof(avenrun));
for (i = 0; i < sizeof(avenrun)/sizeof(*avenrun); i++)
printf ("%6.1f", avenrun[i]);
putchar ('\n');
fflush (stdout);
if (count && interval)
sleep (interval);
} while (--count && interval);
}
err(why)
char *why;
{
extern int errno;
fprintf (stderr,"load: %s",why);
if (errno)
fprintf (stderr, " (%d)", errno);
fprintf (stderr, "\n");
exit(2);
}
kseek(fd,offset,whence,maddr)
long offset;
{
if (-1==lseek(fd,offset&~maddr,whence)) err("kmem seek error");
}
kread(fd,buf,siz)
char *buf;
{
if (siz!=read(fd,buf,siz)) err("kmem read error");
}