xref: /csrg-svn/lib/libc/gen/getloadavg.c (revision 60350)
144571Smarc /*-
238184Smckusick  * Copyright (c) 1989 The Regents of the University of California.
338184Smckusick  * All rights reserved.
438184Smckusick  *
544571Smarc  * %sccs.include.redist.c%
638184Smckusick  */
738184Smckusick 
838184Smckusick #if defined(LIBC_SCCS) && !defined(lint)
9*60350Storek static char sccsid[] = "@(#)getloadavg.c	6.7 (Berkeley) 05/25/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
2738184Smckusick getloadavg(loadavg, nelem)
2838184Smckusick 	double loadavg[];
2938184Smckusick 	int nelem;
3038184Smckusick {
3152663Smckusick 	struct loadavg loadinfo;
32*60350Storek 	int i, mib[2];
33*60350Storek 	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