xref: /csrg-svn/lib/libc/gen/getloadavg.c (revision 59369)
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*59369Sbostic static char sccsid[] = "@(#)getloadavg.c	6.5 (Berkeley) 04/27/93";
1044571Smarc #endif /* LIBC_SCCS and not lint */
1138184Smckusick 
1238184Smckusick #include <sys/types.h>
13*59369Sbostic #include <sys/time.h>
14*59369Sbostic #include <sys/resource.h>
1558899Smckusick #include <sys/sysctl.h>
1658899Smckusick #include <vm/vm_param.h>
1738184Smckusick 
18*59369Sbostic #include <stdlib.h>
1938184Smckusick 
2038184Smckusick /*
21*59369Sbostic  * getloadavg() -- Get system load averages.
2238184Smckusick  *
23*59369Sbostic  * Put `nelem' samples into `loadavg' array.
24*59369Sbostic  * Return number of samples retrieved, or -1 on error.
2538184Smckusick  */
26*59369Sbostic int
2738184Smckusick getloadavg(loadavg, nelem)
2838184Smckusick 	double loadavg[];
2938184Smckusick 	int nelem;
3038184Smckusick {
3152663Smckusick 	struct loadavg loadinfo;
32*59369Sbostic 	int size, i, mib[2];
3338184Smckusick 
3458899Smckusick 	mib[0] = CTL_VM;
3558899Smckusick 	mib[1] = VM_LOADAVG;
36*59369Sbostic 	size = sizeof(loadinfo);
37*59369Sbostic 	if (sysctl(mib, 2, &loadinfo, &size, NULL, 0) < 0)
38*59369Sbostic 		return (-1);
39*59369Sbostic 
4052663Smckusick 	nelem = MIN(nelem, sizeof(loadinfo.ldavg) / sizeof(fixpt_t));
4138184Smckusick 	for (i = 0; i < nelem; i++)
4252663Smckusick 		loadavg[i] = (double) loadinfo.ldavg[i] / loadinfo.fscale;
4338184Smckusick 	return (nelem);
4438184Smckusick }
45