lload for xenix

David C. Rein dave at mobile.UUCP
Thu Jun 1 04:56:53 AEST 1989


Thank you very much, Lars, for putting lload.c onto the net!!  I just
happened to of been looking for such a program!!  Starting it up in /etc/rc,
and with a small modification, I used it to develop an 'uptime' command
for Xenix (maybe there is already one out there, but, I didn't know about
it).  Anyway, I'd thought that anyone that found a use for lload.c might
alos find a use for uptime.c. 


----------------------- cut here for uptime.c ------------------------


/*							(set ts=4)
	This program will read the information written by the lload.c program,
	and display it in a 'ruptime' format.  The lload.c program was 
	written by Lars Pensj from Myab Gothenburg, Sweden, and was
	distributed in alt.sources.  A modified version for Xenix was
	developed by Sanford Zelkovitz.  The following changes need to be
	made to the lload.c program:

		double av[3] = { 0.0, 0.0, 0.0 };
		--	
		double av[4] = { 0.0, 0.0, 0.0, 0.0 };

		and


	    if (write(loadfile, (char *)av, sizeof av) != sizeof av) {
		perror(argv[0]);
		exit(1);
	    }
		--
		av[3] += sleeping;
	    if (write(loadfile, (char *)av, sizeof av) != sizeof av) {
		perror(argv[0]);
		exit(1);
	    }

	Compile: cc -o uptime uptime.c
	Created on 5/29 by David C. Rein 
			(uunet!ism780c!kodak!gizzmo!lazlo!mobile!dave)
*/

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <utmp.h>
#include <sys/utsname.h>
#define LOADAV "/etc/loadav"					/* Data filename		*/


main()
{
	double av[4];								/* Load information		*/
	int fd;										/* Information file FD 	*/
	int	minutes, hours;							/* Hours and minutes up	*/
	double days,temp;							/* Days up, and calc temp*/
	struct utmp *tstr;							/* Pointer to utmp struct*/
	int users = 0;								/* Users logged in		*/
	struct utsname name;						/* System nodename struct*/

	if ( (fd = open(LOADAV,O_RDONLY)) < 0 ) {
		perror(LOADAV);							/* Can't open info file	*/
		exit(1);
	}
	if ( read(fd, &av[0], sizeof(av)) != sizeof ( av )) {
		perror("Invalid data file");			/* Bad data in file		*/
		exit( 1 );
	}
	close(fd );
	temp = (double)3600 * (double)24;			/* Calculate constants	*/
	minutes = (int)((int)(av[3] / 60 ) % 60);	/* Calculate minutes	*/
	hours = (int)((int)(av[3] / 3600 ) % 24);	/* Calculate hours		*/
	days = (av[3] / temp);						/* Calculate days		*/
	while ( (tstr = (struct utmp *)getutent()) != NULL ) {
		if ( !(tstr->ut_name[0] == 0 || !strncmp(tstr->ut_name,"LOGIN",5))) {
			users++;							/* If not LOGIN or null 
													username, real user	*/
		}
	}
	if ( uname(&name) < 0 ) {
		perror("Unable to get system name");	/* Can't get system name*/
		exit( 1 );
	}
	printf("%-8.8s  up", name.nodename);		/* Print system name	*/
	if ( (int)days > (int)0 )
		printf("%3d+", (int)days);
	else										/* Print days up		*/
		printf("    ");
	printf("%.2d:%.2d,", hours, minutes);		/* Print hours:mins up	*/
	printf("%4d users,", users);				/* # of logged in users	*/
	printf("  load %4.2f, %4.2f, %4.2f\n",av[0], av[1], av[2]);/*load	*/
}



---
                                                               Dave Rein
----------------------------------\  /-----------------------------------------
UUCP: ..!kodak!gizzmo!lazlo!\      \/   "It just goes to show what you can do 
            mobile!dave            /\         if you're a total psychotic"
Domain: dcr0801 at ritcv             /  \           -- Woody Allen
---------------------------------/    \----------------------------------------



More information about the Comp.unix.xenix mailing list