xref: /csrg-svn/lib/libc/gen/getloadavg.c (revision 61111)
144571Smarc /*-
2*61111Sbostic  * Copyright (c) 1989, 1993
3*61111Sbostic  *	The Regents of the University of California.  All rights reserved.
438184Smckusick  *
544571Smarc  * %sccs.include.redist.c%
638184Smckusick  */
738184Smckusick 
838184Smckusick #if defined(LIBC_SCCS) && !defined(lint)
9*61111Sbostic static char sccsid[] = "@(#)getloadavg.c	8.1 (Berkeley) 06/04/93";
1044571Smarc #endif /* LIBC_SCCS and not lint */
1138184Smckusick 
1259390Sbostic #include <sys/param.h>
1359369Sbostic #include <sys/time.h>
1459369Sbostic #include <sys/resource.h>
1558899Smckusick #include <sys/sysctl.h>
1658899Smckusick #include <vm/vm_param.h>
1738184Smckusick 
1859369Sbostic #include <stdlib.h>
1938184Smckusick 
2038184Smckusick /*
2159369Sbostic  * getloadavg() -- Get system load averages.
2238184Smckusick  *
2359369Sbostic  * Put `nelem' samples into `loadavg' array.
2459369Sbostic  * Return number of samples retrieved, or -1 on error.
2538184Smckusick  */
2659369Sbostic int
getloadavg(loadavg,nelem)2738184Smckusick getloadavg(loadavg, nelem)
2838184Smckusick 	double loadavg[];
2938184Smckusick 	int nelem;
3038184Smckusick {
3152663Smckusick 	struct loadavg loadinfo;
3260350Storek 	int i, mib[2];
3360350Storek 	size_t size;
3438184Smckusick 
3558899Smckusick 	mib[0] = CTL_VM;
3658899Smckusick 	mib[1] = VM_LOADAVG;
3759369Sbostic 	size = sizeof(loadinfo);
3859369Sbostic 	if (sysctl(mib, 2, &loadinfo, &size, NULL, 0) < 0)
3959369Sbostic 		return (-1);
4059369Sbostic 
4152663Smckusick 	nelem = MIN(nelem, sizeof(loadinfo.ldavg) / sizeof(fixpt_t));
4238184Smckusick 	for (i = 0; i < nelem; i++)
4352663Smckusick 		loadavg[i] = (double) loadinfo.ldavg[i] / loadinfo.fscale;
4438184Smckusick 	return (nelem);
4538184Smckusick }
46