annotate src/getloadavg.c @ 4413:5a00cec8e9b0

(fill-region-as-paragraph): When we take one word after the fill column, don't stop at period with just one space. When checking whether at beginning of line, if no fill prefix, ignore intervening whitespace.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Aug 1993 05:55:56 +0000
parents 084df29978c7
children e51a7e8fffe2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1 /* Get the system load averages.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2 Copyright (C) 1985, 86, 87, 88, 89, 91, 92, 93
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3 Free Software Foundation, Inc.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
4
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
5 This program is free software; you can redistribute it and/or modify
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
7 the Free Software Foundation; either version 2, or (at your option)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
8 any later version.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
9
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
13 GNU General Public License for more details.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
14
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
16 along with this program; if not, write to the Free Software
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
18
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
19 /* Compile-time symbols that this file uses:
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
20
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
21 FIXUP_KERNEL_SYMBOL_ADDR() Adjust address in returned struct nlist.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
22 KERNEL_FILE Pathname of the kernel to nlist.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
23 LDAV_CVT() Scale the load average from the kernel.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
24 Returns a double.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
25 LDAV_SYMBOL Name of kernel symbol giving load average.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
26 LOAD_AVE_TYPE Type of the load average array in the kernel.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
27 Must be defined unless one of
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
28 apollo, DGUX, NeXT, or UMAX is defined;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
29 otherwise, no load average is available.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
30 NLIST_STRUCT Include nlist.h, not a.out.h, and
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
31 the nlist n_name element is a pointer,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
32 not an array.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
33 NLIST_NAME_UNION struct nlist has an n_un member, not n_name.
4349
dd0ad363f07a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4296
diff changeset
34 LINUX_LDAV_FILE [__linux__]: File containing load averages.
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
35
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
36 Specific system predefines this file uses, aside from setting
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
37 default values if not emacs:
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
38
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
39 apollo
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
40 BSD Real BSD, not just BSD-like.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
41 DGUX
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
42 eunice UNIX emulator under VMS.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
43 hpux
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
44 NeXT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
45 sgi
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
46 sequent Sequent Dynix 3.x.x (BSD)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
47 _SEQUENT_ Sequent DYNIX/ptx 1.x.x (SYSV)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
48 sony_news NEWS-OS (works at least for 4.1C)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
49 UMAX
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
50 UMAX4_3
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
51 VMS
4349
dd0ad363f07a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4296
diff changeset
52 __linux__ Linux: assumes /proc filesystem mounted.
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
53 Support from Michael K. Johnson.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
54
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
55 In addition, to avoid nesting many #ifdefs, we internally set
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
56 LDAV_DONE to indicate that the load average has been computed.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
57
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
58 We also #define LDAV_PRIVILEGED if a program will require
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
59 special installation to be able to call getloadavg. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
60
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
61 #include <sys/types.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
62
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
63 /* Both the Emacs and non-Emacs sections want this. Some
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
64 configuration files' definitions for the LOAD_AVE_CVT macro (like
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
65 sparc.h's) use macros like FSCALE, defined here. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
66 #ifdef unix
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
67 #include <sys/param.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
68 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
69
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
70
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
71 #ifdef HAVE_CONFIG_H
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
72 #include "config.h"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
73 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
74
4409
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
75
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
76 /* Exclude all the code except the test program at the end
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
77 if the system has its own `getloadavg' function. */
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
78
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
79 #ifndef HAVE_GETLOADAVG
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
80
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
81
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
82 /* The existing Emacs configuration files define a macro called
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
83 LOAD_AVE_CVT, which accepts a value of type LOAD_AVE_TYPE, and
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
84 returns the load average multiplied by 100. What we actually want
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
85 is a macro called LDAV_CVT, which returns the load average as an
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
86 unmultiplied double.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
87
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
88 For backwards compatibility, we'll define LDAV_CVT in terms of
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
89 LOAD_AVE_CVT, but future machine config files should just define
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
90 LDAV_CVT directly. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
91
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
92 #if !defined(LDAV_CVT) && defined(LOAD_AVE_CVT)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
93 #define LDAV_CVT(n) (LOAD_AVE_CVT (n) / 100.0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
94 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
95
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
96 #if !defined (BSD) && defined (ultrix)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
97 /* Ultrix behaves like BSD on Vaxen. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
98 #define BSD
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
99 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
100
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
101 #ifdef NeXT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
102 /* NeXT in the 2.{0,1,2} releases defines BSD in <sys/param.h>, which
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
103 conflicts with the definition understood in this file, that this
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
104 really is BSD. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
105 #undef BSD
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
106
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
107 /* NeXT defines FSCALE in <sys/param.h>. However, we take FSCALE being
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
108 defined to mean that the nlist method should be used, which is not true. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
109 #undef FSCALE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
110 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
111
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
112 /* Set values that are different from the defaults, which are
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
113 set a little farther down with #ifndef. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
114
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
115
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
116 /* Some shorthands. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
117
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
118 #if defined (HPUX) && !defined (hpux)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
119 #define hpux
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
120 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
121
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
122 #if defined(hp300) && !defined(hpux)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
123 #define MORE_BSD
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
124 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
125
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
126 #if defined(ultrix) && defined(mips)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
127 #define decstation
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
128 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
129
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
130 #if defined(sun) && defined(SVR4)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
131 #define SUNOS_5
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
132 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
133
4296
294aa73cf31c *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4288
diff changeset
134 #if defined (__osf__) && (defined (__alpha) || defined (__alpha__))
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
135 #define OSF_ALPHA
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
136 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
137
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
138 #if defined (__osf__) && (defined (mips) || defined (__mips__))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
139 #define OSF_MIPS
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
140 #include <sys/table.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
141 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
142
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
143 /* UTek's /bin/cc on the 4300 has no architecture specific cpp define by
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
144 default, but _MACH_IND_SYS_TYPES is defined in <sys/types.h>. Combine
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
145 that with a couple of other things and we'll have a unique match. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
146 #if !defined (tek4300) && defined (unix) && defined (m68k) && defined (mc68000) && defined (mc68020) && defined (_MACH_IND_SYS_TYPES)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
147 #define tek4300 /* Define by emacs, but not by other users. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
148 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
149
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
150
3587
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
151 /* VAX C can't handle multi-line #ifs, or lines longer than 256 chars. */
3597
a9d02b8cec6e *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 3587
diff changeset
152 #ifndef LOAD_AVE_TYPE
a9d02b8cec6e *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 3587
diff changeset
153
3587
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
154 #ifdef MORE_BSD
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
155 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
156 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
157
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
158 #ifdef sun
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
159 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
160 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
161
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
162 #ifdef decstation
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
163 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
164 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
165
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
166 #ifdef _SEQUENT_
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
167 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
168 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
169
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
170 #ifdef sgi
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
171 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
172 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
173
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
174 #ifdef SVR4
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
175 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
176 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
177
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
178 #ifdef sony_news
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
179 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
180 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
181
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
182 #ifdef sequent
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
183 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
184 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
185
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
186 #ifdef OSF_ALPHA
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
187 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
188 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
189
3597
a9d02b8cec6e *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 3587
diff changeset
190 #if defined (ardent) && defined (titan)
3587
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
191 #define LOAD_AVE_TYPE long
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
192 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
193
3597
a9d02b8cec6e *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 3587
diff changeset
194 #ifdef tek4300
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
195 #define LOAD_AVE_TYPE long
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
196 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
197
3597
a9d02b8cec6e *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 3587
diff changeset
198 #endif /* No LOAD_AVE_TYPE. */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
199
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
200 #ifndef FSCALE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
201
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
202 /* SunOS and some others define FSCALE in sys/param.h. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
203
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
204 #ifdef MORE_BSD
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
205 #define FSCALE 2048.0
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
206 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
207
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
208 #if defined(MIPS) || defined(SVR4) || defined(decstation)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
209 #define FSCALE 256
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
210 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
211
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
212 #if defined (sgi) || defined (sequent)
4288
64c6649f40b8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4064
diff changeset
213 /* Sometimes both MIPS and sgi are defined, so FSCALE was just defined
64c6649f40b8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4064
diff changeset
214 above under #ifdef MIPS. But we want the sgi value. */
64c6649f40b8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4064
diff changeset
215 #undef FSCALE
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
216 #define FSCALE 1000.0
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
217 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
218
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
219 #if defined (ardent) && defined (titan)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
220 #define FSCALE 65536.0
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
221 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
222
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
223 #ifdef tek4300
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
224 #define FSCALE 100.0
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
225 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
226
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
227 #endif /* Not FSCALE. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
228
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
229 #if !defined (LDAV_CVT) && defined (FSCALE)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
230 #define LDAV_CVT(n) (((double) (n)) / FSCALE)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
231 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
232
3587
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
233 /* VAX C can't handle multi-line #ifs, or lines longer that 256 characters. */
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
234 #ifndef NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
235
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
236 #ifdef MORE_BSD
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
237 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
238 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
239
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
240 #ifdef sun
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
241 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
242 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
243
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
244 #ifdef decstation
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
245 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
246 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
247
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
248 #ifdef hpux
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
249 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
250 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
251
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
252 #if defined (_SEQUENT_) || defined (sequent)
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
253 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
254 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
255
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
256 #ifdef sgi
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
257 #define NLIST_STRUCT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
258 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
259
3587
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
260 #ifdef SVR4
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
261 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
262 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
263
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
264 #ifdef sony_news
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
265 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
266 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
267
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
268 #ifdef OSF_ALPHA
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
269 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
270 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
271
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
272 #if defined (ardent) && defined (titan)
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
273 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
274 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
275
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
276 #ifdef tex4300
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
277 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
278 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
279
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
280 #ifdef butterfly
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
281 #define NLIST_STRUCT
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
282 #endif
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
283
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
284 #endif /* defined (NLIST_STRUCT) */
2b2b70186646 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 3037
diff changeset
285
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
286
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
287 #if defined(sgi) || (defined(mips) && !defined(BSD))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
288 #define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
289 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
290
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
291
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
292 #if !defined (KERNEL_FILE) && defined (sequent)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
293 #define KERNEL_FILE "/dynix"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
294 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
295
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
296 #if !defined (KERNEL_FILE) && defined (hpux)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
297 #define KERNEL_FILE "/hp-ux"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
298 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
299
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
300 #if !defined(KERNEL_FILE) && (defined(_SEQUENT_) || defined(MIPS) || defined(SVR4) || defined(ISC) || defined (sgi) || defined(SVR4) || (defined (ardent) && defined (titan)))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
301 #define KERNEL_FILE "/unix"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
302 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
303
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
304
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
305 #if !defined (LDAV_SYMBOL) && defined (alliant)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
306 #define LDAV_SYMBOL "_Loadavg"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
307 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
308
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
309 #if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
310 #define LDAV_SYMBOL "avenrun"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
311 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
312
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
313 #ifdef HAVE_UNISTD_H
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
314 #include <unistd.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
315 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
316
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
317 #include <stdio.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
318 #include <errno.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
319
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
320 #ifndef errno
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
321 extern int errno;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
322 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
323
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
324 /* LOAD_AVE_TYPE should only get defined if we're going to use the
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
325 nlist method. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
326 #if !defined(LOAD_AVE_TYPE) && (defined(BSD) || defined(LDAV_CVT) || defined(KERNEL_FILE) || defined(LDAV_SYMBOL))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
327 #define LOAD_AVE_TYPE double
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
328 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
329
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
330 #ifdef LOAD_AVE_TYPE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
331
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
332 #ifndef VMS
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
333 #ifndef NLIST_STRUCT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
334 #include <a.out.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
335 #else /* NLIST_STRUCT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
336 #include <nlist.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
337 #endif /* NLIST_STRUCT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
338
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
339 #ifdef SUNOS_5
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
340 #include <fcntl.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
341 #include <kvm.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
342 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
343
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
344 #ifndef KERNEL_FILE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
345 #define KERNEL_FILE "/vmunix"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
346 #endif /* KERNEL_FILE */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
347
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
348 #ifndef LDAV_SYMBOL
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
349 #define LDAV_SYMBOL "_avenrun"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
350 #endif /* LDAV_SYMBOL */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
351
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
352 #else /* VMS */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
353
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
354 #ifndef eunice
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
355 #include <iodef.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
356 #include <descrip.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
357 #else /* eunice */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
358 #include <vms/iodef.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
359 #endif /* eunice */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
360 #endif /* VMS */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
361
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
362 #ifndef LDAV_CVT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
363 #define LDAV_CVT(n) ((double) (n))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
364 #endif /* !LDAV_CVT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
365
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
366 #endif /* LOAD_AVE_TYPE */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
367
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
368 #ifdef NeXT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
369 #ifdef HAVE_MACH_MACH_H
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
370 #include <mach/mach.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
371 #else
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
372 #include <mach.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
373 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
374 #endif /* NeXT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
375
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
376 #ifdef sgi
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
377 #include <sys/sysmp.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
378 #endif /* sgi */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
379
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
380 #ifdef UMAX
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
381 #include <stdio.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
382 #include <signal.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
383 #include <sys/time.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
384 #include <sys/wait.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
385 #include <sys/syscall.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
386
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
387 #ifdef UMAX_43
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
388 #include <machine/cpu.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
389 #include <inq_stats/statistics.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
390 #include <inq_stats/sysstats.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
391 #include <inq_stats/cpustats.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
392 #include <inq_stats/procstats.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
393 #else /* Not UMAX_43. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
394 #include <sys/sysdefs.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
395 #include <sys/statistics.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
396 #include <sys/sysstats.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
397 #include <sys/cpudefs.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
398 #include <sys/cpustats.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
399 #include <sys/procstats.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
400 #endif /* Not UMAX_43. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
401 #endif /* UMAX */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
402
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
403 #ifdef DGUX
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
404 #include <sys/dg_sys_info.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
405 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
406
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
407 #if defined(HAVE_FCNTL_H) || defined(_POSIX_VERSION)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
408 #include <fcntl.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
409 #else
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
410 #include <sys/file.h>
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
411 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
412
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
413 /* Avoid static vars inside a function since in HPUX they dump as pure. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
414
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
415 #ifdef NeXT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
416 static processor_set_t default_set;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
417 static int getloadavg_initialized;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
418 #endif /* NeXT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
419
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
420 #ifdef UMAX
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
421 static unsigned int cpus = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
422 static unsigned int samples;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
423 #endif /* UMAX */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
424
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
425 #ifdef DGUX
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
426 static struct dg_sys_info_load_info load_info; /* what-a-mouthful! */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
427 #endif /* DGUX */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
428
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
429 #ifdef LOAD_AVE_TYPE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
430 /* File descriptor open to /dev/kmem or VMS load ave driver. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
431 static int channel;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
432 /* Nonzero iff channel is valid. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
433 static int getloadavg_initialized;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
434 /* Offset in kmem to seek to read load average, or 0 means invalid. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
435 static long offset;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
436
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
437 #if !defined(VMS) && !defined(sgi)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
438 static struct nlist nl[2];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
439 #endif /* Not VMS or sgi */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
440
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
441 #ifdef SUNOS_5
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
442 static kvm_t *kd;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
443 #endif /* SUNOS_5 */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
444
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
445 #endif /* LOAD_AVE_TYPE */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
446
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
447 /* Put the 1 minute, 5 minute and 15 minute load averages
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
448 into the first NELEM elements of LOADAVG.
4064
d14ba65a1363 *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 4011
diff changeset
449 Return the number written (never more than 3, but may be less than NELEM),
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
450 or -1 if an error occurred. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
451
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
452 int
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
453 getloadavg (loadavg, nelem)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
454 double loadavg[];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
455 int nelem;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
456 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
457 int elem = 0; /* Return value. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
458
3037
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
459 #ifdef NO_GET_LOAD_AVG
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
460 #define LDAV_DONE
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
461 /* Set errno to zero to indicate that there was no particular error;
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
462 this function just can't work at all on this system. */
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
463 errno = 0;
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
464 elem = -1;
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
465 #endif
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
466
4349
dd0ad363f07a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4296
diff changeset
467 #if !defined (LDAV_DONE) && defined (__linux__)
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
468 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
469 #undef LOAD_AVE_TYPE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
470
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
471 #ifndef LINUX_LDAV_FILE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
472 #define LINUX_LDAV_FILE "/proc/loadavg"
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
473 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
474
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
475 char ldavgbuf[40];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
476 double load_ave[3];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
477 int fd, count;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
478
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
479 fd = open (LINUX_LDAV_FILE, O_RDONLY);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
480 if (fd == -1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
481 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
482 count = read (fd, ldavgbuf, 40);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
483 (void) close (fd);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
484 if (count <= 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
485 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
486
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
487 count = sscanf (ldavgbuf, "%lf %lf %lf",
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
488 &load_ave[0], &load_ave[1], &load_ave[2]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
489 if (count < 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
490 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
491
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
492 for (elem = 0; elem < nelem && elem < count; elem++)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
493 loadavg[elem] = load_ave[elem];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
494
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
495 return elem;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
496
4349
dd0ad363f07a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4296
diff changeset
497 #endif /* __linux__ */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
498
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
499 #if !defined (LDAV_DONE) && defined (NeXT)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
500 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
501 /* The NeXT code was adapted from iscreen 3.2. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
502
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
503 host_t host;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
504 struct processor_set_basic_info info;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
505 unsigned info_count;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
506
4064
d14ba65a1363 *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 4011
diff changeset
507 /* We only know how to get the 1-minute average for this system,
d14ba65a1363 *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 4011
diff changeset
508 so even if the caller asks for more than 1, we only return 1. */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
509
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
510 if (!getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
511 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
512 if (processor_set_default (host_self (), &default_set) == KERN_SUCCESS)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
513 getloadavg_initialized = 1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
514 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
515
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
516 if (getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
517 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
518 info_count = PROCESSOR_SET_BASIC_INFO_COUNT;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
519 if (processor_set_info (default_set, PROCESSOR_SET_BASIC_INFO, &host,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
520 (processor_set_info_t) &info, &info_count)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
521 != KERN_SUCCESS)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
522 getloadavg_initialized = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
523 else
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
524 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
525 if (nelem > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
526 loadavg[elem++] = (double) info.load_average / LOAD_SCALE;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
527 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
528 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
529
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
530 if (!getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
531 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
532 #endif /* NeXT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
533
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
534 #if !defined (LDAV_DONE) && defined (UMAX)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
535 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
536 /* UMAX 4.2, which runs on the Encore Multimax multiprocessor, does not
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
537 have a /dev/kmem. Information about the workings of the running kernel
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
538 can be gathered with inq_stats system calls.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
539 We only know how to get the 1-minute average for this system. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
540
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
541 struct proc_summary proc_sum_data;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
542 struct stat_descr proc_info;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
543 double load;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
544 register unsigned int i, j;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
545
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
546 if (cpus == 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
547 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
548 register unsigned int c, i;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
549 struct cpu_config conf;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
550 struct stat_descr desc;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
551
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
552 desc.sd_next = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
553 desc.sd_subsys = SUBSYS_CPU;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
554 desc.sd_type = CPUTYPE_CONFIG;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
555 desc.sd_addr = (char *) &conf;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
556 desc.sd_size = sizeof conf;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
557
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
558 if (inq_stats (1, &desc))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
559 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
560
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
561 c = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
562 for (i = 0; i < conf.config_maxclass; ++i)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
563 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
564 struct class_stats stats;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
565 bzero ((char *) &stats, sizeof stats);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
566
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
567 desc.sd_type = CPUTYPE_CLASS;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
568 desc.sd_objid = i;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
569 desc.sd_addr = (char *) &stats;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
570 desc.sd_size = sizeof stats;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
571
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
572 if (inq_stats (1, &desc))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
573 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
574
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
575 c += stats.class_numcpus;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
576 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
577 cpus = c;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
578 samples = cpus < 2 ? 3 : (2 * cpus / 3);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
579 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
580
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
581 proc_info.sd_next = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
582 proc_info.sd_subsys = SUBSYS_PROC;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
583 proc_info.sd_type = PROCTYPE_SUMMARY;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
584 proc_info.sd_addr = (char *) &proc_sum_data;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
585 proc_info.sd_size = sizeof (struct proc_summary);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
586 proc_info.sd_sizeused = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
587
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
588 if (inq_stats (1, &proc_info) != 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
589 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
590
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
591 load = proc_sum_data.ps_nrunnable;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
592 j = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
593 for (i = samples - 1; i > 0; --i)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
594 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
595 load += proc_sum_data.ps_nrun[j];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
596 if (j++ == PS_NRUNSIZE)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
597 j = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
598 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
599
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
600 if (nelem > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
601 loadavg[elem++] = load / samples / cpus;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
602 #endif /* UMAX */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
603
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
604 #if !defined (LDAV_DONE) && defined (DGUX)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
605 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
606 /* This call can return -1 for an error, but with good args
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
607 it's not supposed to fail. The first argument is for no
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
608 apparent reason of type `long int *'. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
609 dg_sys_info ((long int *) &load_info,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
610 DG_SYS_INFO_LOAD_INFO_TYPE,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
611 DG_SYS_INFO_LOAD_VERSION_0);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
612
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
613 if (nelem > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
614 loadavg[elem++] = load_info.one_minute;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
615 if (nelem > 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
616 loadavg[elem++] = load_info.five_minute;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
617 if (nelem > 2)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
618 loadavg[elem++] = load_info.fifteen_minute;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
619 #endif /* DGUX */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
620
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
621 #if !defined (LDAV_DONE) && defined (apollo)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
622 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
623 /* Apollo code from lisch@mentorg.com (Ray Lischner).
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
624
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
625 This system call is not documented. The load average is obtained as
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
626 three long integers, for the load average over the past minute,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
627 five minutes, and fifteen minutes. Each value is a scaled integer,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
628 with 16 bits of integer part and 16 bits of fraction part.
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
629
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
630 I'm not sure which operating system first supported this system call,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
631 but I know that SR10.2 supports it. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
632
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
633 extern void proc1_$get_loadav ();
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
634 unsigned long load_ave[3];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
635
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
636 proc1_$get_loadav (load_ave);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
637
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
638 if (nelem > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
639 loadavg[elem++] = load_ave[0] / 65536.0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
640 if (nelem > 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
641 loadavg[elem++] = load_ave[1] / 65536.0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
642 if (nelem > 2)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
643 loadavg[elem++] = load_ave[2] / 65536.0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
644 #endif /* apollo */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
645
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
646 #if !defined (LDAV_DONE) && defined (OSF_MIPS)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
647 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
648
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
649 struct tbl_loadavg load_ave;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
650 table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave));
3037
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
651 loadavg[elem++]
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
652 = (load_ave.tl_lscale == 0
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
653 ? load_ave.tl_avenrun.d[0]
3c7a86dba45b *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 2928
diff changeset
654 : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale));
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
655 #endif /* OSF_MIPS */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
656
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
657 #if !defined (LDAV_DONE) && defined (VMS)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
658 /* VMS specific code -- read from the Load Ave driver. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
659
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
660 LOAD_AVE_TYPE load_ave[3];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
661 static int getloadavg_initialized = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
662 #ifdef eunice
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
663 struct
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
664 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
665 int dsc$w_length;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
666 char *dsc$a_pointer;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
667 } descriptor;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
668 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
669
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
670 /* Ensure that there is a channel open to the load ave device. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
671 if (!getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
672 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
673 /* Attempt to open the channel. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
674 #ifdef eunice
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
675 descriptor.dsc$w_length = 18;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
676 descriptor.dsc$a_pointer = "$$VMS_LOAD_AVERAGE";
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
677 #else
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
678 $DESCRIPTOR (descriptor, "LAV0:");
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
679 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
680 if (sys$assign (&descriptor, &channel, 0, 0) & 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
681 getloadavg_initialized = 1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
682 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
683
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
684 /* Read the load average vector. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
685 if (getloadavg_initialized
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
686 && !(sys$qiow (0, channel, IO$_READVBLK, 0, 0, 0,
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
687 load_ave, 12, 0, 0, 0, 0) & 1))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
688 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
689 sys$dassgn (channel);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
690 getloadavg_initialized = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
691 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
692
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
693 if (!getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
694 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
695 #endif /* VMS */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
696
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
697 #if !defined (LDAV_DONE) && defined(LOAD_AVE_TYPE) && !defined(VMS)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
698
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
699 /* UNIX-specific code -- read the average from /dev/kmem. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
700
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
701 #define LDAV_PRIVILEGED /* This code requires special installation. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
702
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
703 LOAD_AVE_TYPE load_ave[3];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
704
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
705 /* Get the address of LDAV_SYMBOL. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
706 if (offset == 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
707 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
708 #ifndef sgi
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
709 #ifndef NLIST_STRUCT
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
710 strcpy (nl[0].n_name, LDAV_SYMBOL);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
711 strcpy (nl[1].n_name, "");
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
712 #else /* NLIST_STRUCT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
713 #ifdef NLIST_NAME_UNION
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
714 nl[0].n_un.n_name = LDAV_SYMBOL;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
715 nl[1].n_un.n_name = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
716 #else /* not NLIST_NAME_UNION */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
717 nl[0].n_name = LDAV_SYMBOL;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
718 nl[1].n_name = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
719 #endif /* not NLIST_NAME_UNION */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
720 #endif /* NLIST_STRUCT */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
721
4011
1117ec91799c *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 3597
diff changeset
722 #ifndef SUNOS_5
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
723 if (nlist (KERNEL_FILE, nl) >= 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
724 /* Omit "&& nl[0].n_type != 0 " -- it breaks on Sun386i. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
725 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
726 #ifdef FIXUP_KERNEL_SYMBOL_ADDR
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
727 FIXUP_KERNEL_SYMBOL_ADDR (nl);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
728 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
729 offset = nl[0].n_value;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
730 }
4011
1117ec91799c *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 3597
diff changeset
731 #endif /* !SUNOS_5 */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
732 #else /* sgi */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
733 int ldav_off;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
734
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
735 ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
736 if (ldav_off != -1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
737 offset = (long) ldav_off & 0x7fffffff;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
738 #endif /* sgi */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
739 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
740
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
741 /* Make sure we have /dev/kmem open. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
742 if (!getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
743 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
744 #ifndef SUNOS_5
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
745 channel = open ("/dev/kmem", 0);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
746 if (channel >= 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
747 getloadavg_initialized = 1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
748 #else /* SUNOS_5 */
4011
1117ec91799c *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 3597
diff changeset
749 /* We pass 0 for the kernel, corefile, and swapfile names
1117ec91799c *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 3597
diff changeset
750 to use the currently running kernel. */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
751 kd = kvm_open (0, 0, 0, O_RDONLY, 0);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
752 if (kd != 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
753 {
4011
1117ec91799c *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 3597
diff changeset
754 /* nlist the currently running kernel. */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
755 kvm_nlist (kd, nl);
4011
1117ec91799c *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 3597
diff changeset
756 offset = nl[0].n_value;
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
757 getloadavg_initialized = 1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
758 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
759 #endif /* SUNOS_5 */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
760 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
761
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
762 /* If we can, get the load average values. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
763 if (offset && getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
764 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
765 /* Try to read the load. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
766 #ifndef SUNOS_5
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
767 if (lseek (channel, offset, 0) == -1L
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
768 || read (channel, (char *) load_ave, sizeof (load_ave))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
769 != sizeof (load_ave))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
770 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
771 close (channel);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
772 getloadavg_initialized = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
773 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
774 #else /* SUNOS_5 */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
775 if (kvm_read (kd, offset, (char *) load_ave, sizeof (load_ave))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
776 != sizeof (load_ave))
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
777 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
778 kvm_close (kd);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
779 getloadavg_initialized = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
780 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
781 #endif /* SUNOS_5 */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
782 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
783
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
784 if (offset == 0 || !getloadavg_initialized)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
785 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
786 #endif /* LOAD_AVE_TYPE and not VMS */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
787
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
788 #if !defined (LDAV_DONE) && defined (LOAD_AVE_TYPE) /* Including VMS. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
789 if (nelem > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
790 loadavg[elem++] = LDAV_CVT (load_ave[0]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
791 if (nelem > 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
792 loadavg[elem++] = LDAV_CVT (load_ave[1]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
793 if (nelem > 2)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
794 loadavg[elem++] = LDAV_CVT (load_ave[2]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
795
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
796 #define LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
797 #endif /* !LDAV_DONE && LOAD_AVE_TYPE */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
798
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
799 #ifdef LDAV_DONE
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
800 return elem;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
801 #else
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
802 /* Set errno to zero to indicate that there was no particular error;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
803 this function just can't work at all on this system. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
804 errno = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
805 return -1;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
806 #endif
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
807 }
4409
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
808
084df29978c7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4398
diff changeset
809 #endif /* ! HAVE_GETLOADAVG */
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
810
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
811 #ifdef TEST
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
812 void
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
813 main (argc, argv)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
814 int argc;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
815 char **argv;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
816 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
817 int naptime = 0;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
818
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
819 if (argc > 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
820 naptime = atoi (argv[1]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
821
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
822 while (1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
823 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
824 double avg[3];
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
825 int loads;
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
826
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
827 errno = 0; /* Don't be misled if it doesn't set errno. */
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
828 loads = getloadavg (avg, 3);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
829 if (loads == -1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
830 {
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
831 perror ("Error getting load average");
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
832 exit (1);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
833 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
834 if (loads > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
835 printf ("1-minute: %f ", avg[0]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
836 if (loads > 1)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
837 printf ("5-minute: %f ", avg[1]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
838 if (loads > 2)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
839 printf ("15-minute: %f ", avg[2]);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
840 if (loads > 0)
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
841 putchar ('\n');
4398
67c9f8ba927a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4349
diff changeset
842
67c9f8ba927a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4349
diff changeset
843 if (naptime == 0)
67c9f8ba927a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4349
diff changeset
844 break;
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
845 sleep (naptime);
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
846 }
4398
67c9f8ba927a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4349
diff changeset
847
67c9f8ba927a *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 4349
diff changeset
848 exit (0);
2928
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
849 }
a9e4ef13ce85 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
850 #endif /* TEST */