Compare commits
9 Commits
freebsd_0_
...
stable_aft
Author | SHA1 | Date | |
---|---|---|---|
|
321f5180f7 | ||
|
d9874dca81 | ||
|
0d744987ff | ||
|
e6b544af80 | ||
|
266d62bc3c | ||
|
4c3fb58e3e | ||
|
223f986205 | ||
|
ec0d751472 | ||
|
005eaa8e95 |
@@ -1,6 +1,8 @@
|
|||||||
Makefile
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
|
alpha-dec-osf1
|
||||||
|
autoh31167
|
||||||
config.cache
|
config.cache
|
||||||
config.h
|
config.h
|
||||||
config.h.in
|
config.h.in
|
||||||
@@ -22,6 +24,3 @@ stamp-h
|
|||||||
sun4
|
sun4
|
||||||
sun4sol2
|
sun4sol2
|
||||||
support
|
support
|
||||||
i386-freebsd
|
|
||||||
alpha-dec-osf3.0
|
|
||||||
i686-pc-linux-gnu-linux
|
|
||||||
|
635
ChangeLog
635
ChangeLog
@@ -1,552 +1,10 @@
|
|||||||
1998-08-06 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* configure.in (HAVE_SOCKETS, HAVE_SOCKADDR_SUN_LEN): New checks.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: Using `GLIBTOP_GUILE' instead of `HAVE_GUILE'
|
|
||||||
so one should be able to use libgtop without guile in an application
|
|
||||||
even if guile is installed.
|
|
||||||
|
|
||||||
* sysdeps/common/mountlist.c: Fixed some `xstrdup' problems.
|
|
||||||
|
|
||||||
* lib/open.c: Now correctly reading server features for
|
|
||||||
`GLIBTOP_METHOD_PIPE'.
|
|
||||||
|
|
||||||
* sysdeps/freebsd: New directory.
|
|
||||||
|
|
||||||
1998-08-01 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* include/glibtop/swap.h (glibtop_swap): Added `pagein' and `pageout'.
|
|
||||||
|
|
||||||
* kernel/table20/table.h: Removed.
|
|
||||||
* kernel/table21/table.h: Removed.
|
|
||||||
* kernel/table.h: Added. Things are now binary compatible between
|
|
||||||
both kernel versions.
|
|
||||||
|
|
||||||
1998-07-30 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* acconfig.h (u_int64_t, int64_t): Added.
|
|
||||||
|
|
||||||
* lib/lib.awk: Using correct `(1 << GLIBTOP_SYSDEPS_<feature>)'
|
|
||||||
in call to `glibtop_init_r'.
|
|
||||||
|
|
||||||
* configure.in (GNOME_LIBGTOP_TYPES): New check.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: Using `u_int64_t' instead of `unsigned long'
|
|
||||||
and `long' to avoid problems when client is on a 32bit system and
|
|
||||||
the server on a 64bit system.
|
|
||||||
|
|
||||||
* sysdeps/common/gnuslib.c: Using `0xffffffff' instead of -1
|
|
||||||
as error code for inet_addr () since on 64bit systems,
|
|
||||||
`inet_addr (some_error) != (INET_ADDR) -1'.
|
|
||||||
|
|
||||||
* configure.in: Only defining guile stuff if
|
|
||||||
we really have guile.
|
|
||||||
|
|
||||||
1998-07-29 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* guile/ChangeLog: New file.
|
|
||||||
|
|
||||||
* features.def: New format - now includes type of return value
|
|
||||||
and parameters.
|
|
||||||
|
|
||||||
* lib/lib.awk: Changed to use new `features.def'.
|
|
||||||
* sysdeps/guile/guile.awk: Dito;
|
|
||||||
* sysdeps/guile/names/guile-names.awk: Dito.
|
|
||||||
|
|
||||||
* libgtopConf.sh.in: Added
|
|
||||||
`LIBGTOP_NAMES_LIBS', `LIBGTOP_NAMES_INCS',
|
|
||||||
`LIBGTOP_GUILE_NAMES_LIBS', `LIBGTOP_GUILE_NAMES_INCS',
|
|
||||||
`LIBGTOP_MAJOR_VERSION', `LIBGTOP_MINOR_VERSION'
|
|
||||||
`LIBGTOP_VERSION', `libgtop_sysdeps_dir'.
|
|
||||||
|
|
||||||
* acinclude.m4 (AC_LC_SYSDEPS): Removed since this has been
|
|
||||||
replaced with `GNOME_LIBGTOP_SYSDEPS' long ago.
|
|
||||||
|
|
||||||
* LIBGTOP-VERSION: New file.
|
|
||||||
|
|
||||||
* */Makefile.am (INCLUDES): Removed; now defined in `configure.in'.
|
|
||||||
|
|
||||||
* sysdeps/names/mountlist.c: New file.
|
|
||||||
|
|
||||||
* lib/{init, open}.c (GTOP_SERVER): Renamed to `LIBGTOP_SERVER'.
|
|
||||||
|
|
||||||
* configure.in (INCLUDES): Added definition.
|
|
||||||
(libgtop_want_names): Always true; `libgtop_names.la' is now
|
|
||||||
always created since some other programs rely upon it - but
|
|
||||||
have to use `LIBGTOP_NAMES_LIBS' and `LIBGTOP_NAMES_INCS' to
|
|
||||||
use it in your application.
|
|
||||||
(libgtop_want_guile_names): Always true; but you have to use
|
|
||||||
`LIBGTOP_GUILE_NAMES_LIBS' and `LIBGTOP_GUILE_NAMES_INCS' to
|
|
||||||
use it in your application.
|
|
||||||
(LIBGTOP_LIBS): Removed `-lgtop_names' and `-lgtop_guile_names'.
|
|
||||||
(LIBGTOP_NAMES_LIBS): New variable. Use it to link your
|
|
||||||
application with the names interface.
|
|
||||||
(LIBGTOP_NAMES_INCS): New variable. Also #defines `GLIBTOP_NAMES'
|
|
||||||
which is now required if your application wants to use the names
|
|
||||||
interface.
|
|
||||||
(LIBGTOP_GUILE_NAMES_LIBS): New variable. Use it to link your
|
|
||||||
application with the guile names interface.
|
|
||||||
(LIBGTOP_GUILE_NAMES_INCS): New variable. Also #defines
|
|
||||||
`GLIBTOP_NAMES' and `GLIBTOP_GUILE_NAMES' which are now required
|
|
||||||
if your application wants to use the guile names interface.
|
|
||||||
|
|
||||||
1998-07-24 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* sysdeps/common/mountlist.c (glibtop_get_mountlist_s):
|
|
||||||
Added `all_fs' parameter.
|
|
||||||
|
|
||||||
* sysdeps/{kernel, linux}/*.c: Replaced `glibtop_init_r' with
|
|
||||||
`glibtop_init_s'.
|
|
||||||
|
|
||||||
* sysdeps/sun4/open.c (glibtop_init_p): Removed `program_name'
|
|
||||||
parameter.
|
|
||||||
|
|
||||||
* sysdeps/osf1/glibtop_suid.h: New file.
|
|
||||||
|
|
||||||
* sysdeps/osf1/glibtop_server.h: Now correctly using
|
|
||||||
`(1 << GLIBTOP_SYSDEPS_*)' instead of `GLIBTOP_SYSDEPS_*'.
|
|
||||||
|
|
||||||
* sysdeps/osf1/open_suid.c (glibtop_init_p): New function.
|
|
||||||
|
|
||||||
* sysdeps/osf1/proc*.c: Done some more work here.
|
|
||||||
|
|
||||||
1998-07-23 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* include/glibtop/procsignal.h (glibtop_proc_signal):
|
|
||||||
Changed type for `signal', `blocked', `sigignore' and
|
|
||||||
`sigcatch' to `unsigned long long'.
|
|
||||||
|
|
||||||
1998-07-22 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* include/glibtop/fsusage.h: New file.
|
|
||||||
|
|
||||||
* features.def: Added new feature `fsusage'.
|
|
||||||
|
|
||||||
* sysdeps/common/fsusage.c (glibtop_get_fsusage_s): New function.
|
|
||||||
(get_fs_usage): Declared as `static'.
|
|
||||||
|
|
||||||
* sysdeps/names/fsusage.c: New file.
|
|
||||||
|
|
||||||
* include/glibtop/mountlist.h: New file.
|
|
||||||
|
|
||||||
* features.def: Added new feature `mountlist'.
|
|
||||||
|
|
||||||
* sysdeps/common/mountlist.c (glibtop_get_mountlist_s): New function.
|
|
||||||
(read_filesystem_list): Declared as `static'.
|
|
||||||
|
|
||||||
* sysdeps/common/Makefile.am (libgtop_common_la_SOURCES):
|
|
||||||
Added `fsusage.[ch]' and `mountlist.[ch]'.
|
|
||||||
|
|
||||||
* include/glibtop/signal.h: New file.
|
|
||||||
|
|
||||||
* sysdeps/{kernel, linux, osf1, sun4, stub}/siglist.c: New files.
|
|
||||||
|
|
||||||
1998-07-22 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* lib/init.c (glibtop_init_s): Added this init function of
|
|
||||||
the sysdeps directory `libgtop_sysdeps.la'.
|
|
||||||
|
|
||||||
* lib/open.c (glibtop_open_l): Unconditionally calling
|
|
||||||
`glibtop_init_s' after server initialization.
|
|
||||||
|
|
||||||
* lib/lib.awk: Removed references to functions from
|
|
||||||
`libgtop_sysdeps_suid.la' to avoid undefined symbols.
|
|
||||||
|
|
||||||
* sysdeps/stub/open.c (glibtop_open_s): Renamed this
|
|
||||||
function from `glibtop_open_r'.
|
|
||||||
|
|
||||||
* sysdeps/stub/close.c (glibtop_close_s): Renamed this
|
|
||||||
function from `glibtop_close_l'.
|
|
||||||
|
|
||||||
* sysdeps/kernel/open.c (glibtop_open_s): Renamed this
|
|
||||||
function from `glibtop_open_r'.
|
|
||||||
|
|
||||||
* sysdeps/kernel/close.c (glibtop_close_s): Renamed this
|
|
||||||
function from `glibtop_close_l'.
|
|
||||||
|
|
||||||
* sysdeps/linux/open.c (glibtop_open_s): Renamed this
|
|
||||||
function from `glibtop_open_r'.
|
|
||||||
|
|
||||||
* sysdeps/linux/close.c (glibtop_close_s): Renamed this
|
|
||||||
function from `glibtop_close_l'.
|
|
||||||
|
|
||||||
* sysdeps/osf1/Makefile.am (lib_LTLIBRARIES): Added
|
|
||||||
`libgtop_sysdeps_suid.la' for the suid server.
|
|
||||||
|
|
||||||
* sysdeps/osf1/open_suid.c (glibtop_open_p): New file.
|
|
||||||
Contains all stuff that was formerly in `open.c'.
|
|
||||||
|
|
||||||
* sysdeps/osf1/open.c: Moved everything from here into
|
|
||||||
the new file `open_suid.c'.
|
|
||||||
|
|
||||||
* sysdeps/osf1/open.c (glibtop_open_s): New function.
|
|
||||||
|
|
||||||
* sysdeps/osf1/close_suid.c (glibtop_close_p): New file.
|
|
||||||
|
|
||||||
* sysdeps/osf1/close.c (glibtop_close_s): New function.
|
|
||||||
|
|
||||||
* sysdeps/osf1/*.c: Using the new init, open and close
|
|
||||||
functions.
|
|
||||||
|
|
||||||
* sysdeps/sun4/Makefile.am (lib_LTLIBRARIES): Added
|
|
||||||
`libgtop_sysdeps_suid.la' for the suid server.
|
|
||||||
|
|
||||||
* sysdeps/sun4/nosuid.c (glibtop_open_s, glibtop_close_s): New file
|
|
||||||
|
|
||||||
* sysdeps/sun4/*.c: All functions now have the `_p' suffix.
|
|
||||||
|
|
||||||
* sysdeps/common/Makefile.am (lib_LTLIBRARIES): Added
|
|
||||||
`libgtop_suid_common.la' which only contains stuff that is
|
|
||||||
needed in the suid parts.
|
|
||||||
|
|
||||||
* sysdeps/common/xmalloc.c: Using `glibtop_error_io_r' instead
|
|
||||||
of `glibtop_error_r'.
|
|
||||||
|
|
||||||
* sysdeps/{kernel, linux, osf1, sun4, stub}/init.c: Removed.
|
|
||||||
`glibtop_init_s' has been moved into `lib/init.c' since it's the
|
|
||||||
same in all the sysdeps directories.
|
|
||||||
|
|
||||||
* src/server/main.c: It is now an error to request a feature that
|
|
||||||
does not need the suid server.
|
|
||||||
|
|
||||||
* src/proxy: Removed.
|
|
||||||
|
|
||||||
1998-07-21 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* doc/ChangeLog: New file.
|
|
||||||
|
|
||||||
* sysdeps/kernel/*.c: Using `glibtop_error_io_r' instead
|
|
||||||
of `glibtop_error_r'.
|
|
||||||
|
|
||||||
* sysdeps/kernel/proclist.c: Now using the table () function, too.
|
|
||||||
This means that currently the table () function can fetch all
|
|
||||||
information for libgtop and you can even unmount /proc !
|
|
||||||
|
|
||||||
1998-07-18 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* lib/{init, open}.c: Added `GLIBTOP_METHOD_PIPE' again.
|
|
||||||
|
|
||||||
* src/server/main.c: Removed gettext stuff.
|
|
||||||
|
|
||||||
1998-07-17 Martin Baulig <baulig@Stud.Informatik.uni-trier.de>
|
|
||||||
|
|
||||||
* sysdeps/common/sysdeps.c (glibtop_get_sysdeps_r): Using
|
|
||||||
library functions with '_l' prefix instead of directly calling
|
|
||||||
sysdeps code with '_r' prefix. This is necessary for client/server
|
|
||||||
mode.
|
|
||||||
|
|
||||||
* lib/lib.awk (glibtop_get_*): Now correctly using
|
|
||||||
`(1 << GLIBTOP_SYSDEPS_*)' instead of `GLIBTOP_SYSDEPS_*'.
|
|
||||||
|
|
||||||
* sysdeps/sun4/proclist.c (glibtop_get_proclist_p): Added
|
|
||||||
implementation of that feature.
|
|
||||||
|
|
||||||
* sysdeps/sun4/proc_{uid, state}.c: Now working quite well.
|
|
||||||
|
|
||||||
* sysdeps/sun4/proc_{mem, time, signal, kernel, segment}.c: Added
|
|
||||||
some basic implementation; this isn't really working yet.
|
|
||||||
|
|
||||||
* sysdeps/linux/sem_limits.c: Applied patch from Albert K T Hui
|
|
||||||
<avatar@deva.net> for glibc 2.1.
|
|
||||||
|
|
||||||
1998-07-15 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* sysdeps/sun4/loadavg.h: New file. Imported from top 3.4.
|
|
||||||
|
|
||||||
* sysdeps/sun4/uptime.c (glibtop_get_uptime_p): Added
|
|
||||||
implementation of that function using glibtop_get_cpu ().
|
|
||||||
|
|
||||||
* sysdeps/sun4/loadavg.c (glibtop_get_loadavg_p): Added
|
|
||||||
implementation of that feature.
|
|
||||||
|
|
||||||
* sysdeps/sun4/{shm_limits.c, msg_limits.c, shm_limits.c}:
|
|
||||||
Added implementation of this features.
|
|
||||||
|
|
||||||
1998-07-14 Martin Baulig <baulig@Stud.Informatik.uni-trier.de>
|
|
||||||
|
|
||||||
* src/daemon/server_config.h.in: Added some comments.
|
|
||||||
|
|
||||||
* src/daemon/server_config.pl: New file. This is a script you can use
|
|
||||||
to create `server_config.h'. It will query you for some configuration
|
|
||||||
options.
|
|
||||||
|
|
||||||
* configure.in (AC_PROG_AWK): Replaced this test with explicit test
|
|
||||||
for `gawk' and `awk' since `mawk' doesn't work.
|
|
||||||
|
|
||||||
1998-07-14 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* src/daemon/gnuserv.c: Doing correct server initialization
|
|
||||||
using `glibtop_set_parameter_l' and `glibtop_init_r'.
|
|
||||||
|
|
||||||
* src/daemon/main.c: Removed call to `glibtop_init_r'.
|
|
||||||
|
|
||||||
* lib/open.c (glibtop_open_l): We now call the open function
|
|
||||||
of the sysdeps directory (glibtop_open_r) for server method
|
|
||||||
`GLIBTOP_METHOD_DIRECT'.
|
|
||||||
|
|
||||||
* sysdeps/{linux, sun4, stub}/open.c: No longer `memset'
|
|
||||||
server to zero.
|
|
||||||
|
|
||||||
* src/daemon/slave.c: New file.
|
|
||||||
|
|
||||||
* src/daemon/*.c: Done some more work on the daemon.
|
|
||||||
|
|
||||||
* sysdeps/common/gnuslib.c: Removed IPC stuff.
|
|
||||||
|
|
||||||
* include/glibtop/gnuserv.h: Removed IPC stuff.
|
|
||||||
|
|
||||||
* include/glibtop/command.h (glibtop_response_unit): Added
|
|
||||||
typedef for `struct _glibtop_response_unit'.
|
|
||||||
|
|
||||||
* lib/Makefile.am: Using `$(top_srcdir)/features.def'
|
|
||||||
instead of `$(top_builddir)/features.def'.
|
|
||||||
|
|
||||||
* sysdeps/guile/Makefile.am: Using `$(top_srcdir)/features.def'
|
|
||||||
instead of `$(top_builddir)/features.def'.
|
|
||||||
|
|
||||||
* sysdeps/guile/names/Makefile.am: Dito.
|
|
||||||
|
|
||||||
* sysdeps/stub/*.c: changed suffix of all functions
|
|
||||||
from '_s' to '_r'; see also ChangeLog entry from Jun 6.
|
|
||||||
|
|
||||||
1998-07-13 Martin Baulig <baulig@merkur.uni-trier.de>
|
|
||||||
|
|
||||||
* src/daemon/server_config.h: Removed from CVS.
|
|
||||||
This is a config file which needs to be edited.
|
|
||||||
|
|
||||||
* src/daemon/server_config.h.in: Added. This is just
|
|
||||||
an example for `server_config.h'.
|
|
||||||
|
|
||||||
1998-07-13 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* glibtop.h: Fixed invocation of `glibtop_close_r'.
|
|
||||||
|
|
||||||
* sysdeps/linux/procstate.c: Added missing `fclose'.
|
|
||||||
|
|
||||||
* include/glibtop/gnuserv.h (UNIX_DOMAIN_SOCKETS): Defining.
|
|
||||||
|
|
||||||
* include/glibtop/open.h (GLIBTOP_METHOD_UNIX): Added.
|
|
||||||
|
|
||||||
* lib/init.c: Added new method `GLIBTOP_METHOD_UNIX'.
|
|
||||||
|
|
||||||
* lib/open.c: Added support for Unix Domain Sockets.
|
|
||||||
|
|
||||||
* lib/close.c: Now closing inet and unix connections.
|
|
||||||
|
|
||||||
* lib/parameter.c (glibtop_set_parameter_l): You can now
|
|
||||||
set the `method' and `features' fields.
|
|
||||||
|
|
||||||
* src/daemon/server_config.h: New file.
|
|
||||||
|
|
||||||
* src/daemon/{gnuserv.c, main.c}: More work on the server.
|
|
||||||
|
|
||||||
1998-07-10 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* src/Makefile.am (SUBDIRS): Removed `proxy'. This directory
|
|
||||||
is considered obsolete and will be removed soon.
|
|
||||||
|
|
||||||
1998-07-06 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* sysdeps/common/mountlist.c: using functions from `xmalloc.c'.
|
|
||||||
|
|
||||||
* sysdeps/common/error.c: all functions now accept NULL as
|
|
||||||
`server' argument.
|
|
||||||
|
|
||||||
* acconfig.h (AFS, MOUNTED_FREAD, MOUNTED_FREAD_FSTYP,
|
|
||||||
MOUNTED_GETFSSTAT, MOUNTED_GETMNT, MOUNTED_GETMNTENT1,
|
|
||||||
MOUNTED_GETMNTENT2, MOUNTED_GETMNTINFO, MOUNTED_LISTMNTENT,
|
|
||||||
MOUNTED_VMOUNT, STAT_STATFS3_OSF1, STAT_READ_FILSYS,
|
|
||||||
STAT_STATFS2_BSIZE, STAT_STATFS2_FSIZE, STAT_STATFS2_FS_DATA,
|
|
||||||
STAT_STATFS4, STAT_STATVFS, STATFS_TRUNCATES_BLOCK_COUNTS):
|
|
||||||
New macros.
|
|
||||||
|
|
||||||
* configure.in: added GNOME_FILEUTILS_CHECKS.
|
|
||||||
|
|
||||||
* sysdeps/common/{fsusage, mountlist}.[ch]:
|
|
||||||
Imported from GNU Fileutils 3.16.
|
|
||||||
|
|
||||||
* sysdeps/common/mountlist.c: using g_malloc, g_realloc and g_strdup.
|
|
||||||
|
|
||||||
1998-07-03 Martin baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* macros/gnome-libgtop-sysdeps.m4: No longer use
|
|
||||||
`glibtop_machine.h' for Linux.
|
|
||||||
|
|
||||||
* sysdeps/linux/glibtop_machine.h: Removed.
|
|
||||||
|
|
||||||
* sysdeps/guile/guile.awk: Using `scm_append'
|
|
||||||
instead of `gh_append'.
|
|
||||||
|
|
||||||
* sysdeps/guile/names/guile-names.awk: dito.
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: Using code from stable branch again.
|
|
||||||
|
|
||||||
* include/glibtop/parameter.h: New file.
|
|
||||||
|
|
||||||
* lib/parameter.c: New file.
|
|
||||||
|
|
||||||
* lib/{open, init}.c: Done some more work on server
|
|
||||||
initialization
|
|
||||||
|
|
||||||
1998-06-21 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* perl/*: Added perl interface.
|
|
||||||
|
|
||||||
* sysdeps/linux/cpu.c: Bug fix.
|
|
||||||
|
|
||||||
* include/glibtop/global.h: Only including guile header files
|
|
||||||
within libgtop.
|
|
||||||
|
|
||||||
* configure.in (LIGBTOP_LIBS): Added `-lgtop'.
|
|
||||||
|
|
||||||
* Makefile.am: Creating `perl/Makefile.PL' from `perl/Makefile.PL.in'
|
|
||||||
and `perl/Libgtop.xs' using `perl/perl.awk'.
|
|
||||||
|
|
||||||
1998-06-18 Martin Baulig <baulig@taurus.uni-trier.de>
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: Reverted some stuff from 06-07-1998
|
|
||||||
since it was too buggy.
|
|
||||||
|
|
||||||
* glibtop.h (_glibtop): New field `server_port'.
|
|
||||||
|
|
||||||
* lib/xmalloc.c (glibtop_strdup_r): New function.
|
|
||||||
|
|
||||||
* lib/gnuclient.c: Removed.
|
|
||||||
|
|
||||||
* lib/{command, write, read}.c: Changed client <-> server
|
|
||||||
interface to make less system calls.
|
|
||||||
|
|
||||||
* src/daemon/main.c: Changed server side of interface.
|
|
||||||
|
|
||||||
* include/glibtop/command.h (struct _glibtop_response): New
|
|
||||||
structure to return data from the server to the client.
|
|
||||||
|
|
||||||
1998-06-14 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* glibtop.h (struct _glibtop): Added `socket' field.
|
|
||||||
|
|
||||||
* include/glibtop/gnuserv.h: New file. Imported from xemacs 20.3.
|
|
||||||
|
|
||||||
* sysdeps/common/gnuslib.c: New file. Imported from xemacs 20.3
|
|
||||||
|
|
||||||
* lib/gnuclient.c: New file. Imported from xemacs 20.3
|
|
||||||
|
|
||||||
* sysdeps/daemon/gnuserv.c: New file. Imported from xemacs 20.3
|
|
||||||
|
|
||||||
* sysdeps/daemon: New directory.
|
|
||||||
|
|
||||||
* configure.in (LIBGTOP_LIBS, LIBGTOP_GUILE_LIBS): Added
|
|
||||||
`$X_LIBS -lXau' when we have xauth.
|
|
||||||
|
|
||||||
* acconfig.h (HAVE_XAUTH): New tag.
|
|
||||||
|
|
||||||
* configure.in: Added check for `HAVE_XAUTH'.
|
|
||||||
|
|
||||||
* sysdeps/common/error.c (glibtop_warn_r): New function -
|
|
||||||
same as `glibtop_error_r', but doesn't call `exit'.
|
|
||||||
(glibtop_error_io_r, glibtop_warn_io_r): New functions,
|
|
||||||
display `strerror (errno)' together with message.
|
|
||||||
|
|
||||||
* include/glibtop/global.h (TIME_WITH_SYS_TIME): including
|
|
||||||
correct headers; (HAVE_UNISTD_H): Added conditional.
|
|
||||||
Added `#include <sys/param.h>' and `#include <sys/stat.h>'.
|
|
||||||
|
|
||||||
* acconfig.h (HAVE_LINUX_TABLE): New tag.
|
|
||||||
|
|
||||||
* lib/lib.awk: New file.
|
|
||||||
Creates `lib.c' depending upon `features.def'.
|
|
||||||
|
|
||||||
* lib/<feature>.c: Removed.
|
|
||||||
|
|
||||||
* sysdeps/guile/guile.awk: New file.
|
|
||||||
Creates `guile.c' depending upon `features.def'.
|
|
||||||
|
|
||||||
* sysdeps/guile/*.c: Removed.
|
|
||||||
|
|
||||||
1998-06-13 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* features.def: List of features for `guile-names.awk'.
|
|
||||||
|
|
||||||
* sysdeps/guile/names/guile-names.awk: New file.
|
|
||||||
Creates `guile-names.c' depending upon `features.def'.
|
|
||||||
|
|
||||||
* sysdeps/guile/names/*.c: Removed.
|
|
||||||
|
|
||||||
* kernel: New directory. Contains some kernel code to
|
|
||||||
implement a new system call table () to fetch information
|
|
||||||
directly from the Linux kernel.
|
|
||||||
|
|
||||||
* sysdeps/kernel: New directory. Uses the table () function
|
|
||||||
from the `kernel' directory to fetch things directly from
|
|
||||||
the Linux kernel.
|
|
||||||
|
|
||||||
* sysdeps/Makefile.am (DIST_SUBDIRS): Added `kernel'.
|
|
||||||
|
|
||||||
* configure.in: Removed `build_CC' again.
|
|
||||||
|
|
||||||
1998-06-12 Martin Baulig <baulig@taurus.uni-trier.de>
|
1998-06-12 Martin Baulig <baulig@taurus.uni-trier.de>
|
||||||
|
|
||||||
* include/glibtop/sysdeps.h (glibtop_types_sysdeps):
|
|
||||||
Forgot to change declaration on Jun 6.
|
|
||||||
|
|
||||||
* sysdeps/names/sysdeps.c (glibtop_types_sysdeps):
|
|
||||||
Using numeric constants from `types.h' instead of string
|
|
||||||
constants; forgot to change this on Jun 6. Added information
|
|
||||||
about new `features' field of `_glibtop_sysdeps'.
|
|
||||||
|
|
||||||
* sysdeps/guile/names/*.c (glibtop_guile_types_*):
|
|
||||||
Using `gh_ulong2scm' instead of `gh_str02scm'.
|
|
||||||
|
|
||||||
* sysdeps/guile/proclist.c: Replaced call to
|
* sysdeps/guile/proclist.c: Replaced call to
|
||||||
`gh_append2 ()' with `gh_append ()'.
|
`gh_append2 ()' with `gh_append ()'.
|
||||||
|
|
||||||
* sysdeps/guile/names/*.c: dito.
|
* sysdeps/guile/names/*.c: dito.
|
||||||
|
|
||||||
1998-06-08 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* support: Added again.
|
|
||||||
|
|
||||||
* Makefile.am (SUBDIRS): Added `support' again.
|
|
||||||
|
|
||||||
* configure.in: First, we check for gnome. If it is not
|
|
||||||
found, we run GNOME_SUPPORT_CHECKS; otherwise use
|
|
||||||
`$GNOME_LIBDIR -lgnomesupport'.
|
|
||||||
|
|
||||||
1998-06-07 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* examples/ChangeLog: New file.
|
|
||||||
|
|
||||||
* macros/gnome-libgtop-sysdeps.m4: Include
|
|
||||||
`glibtop_machine.h' for Linux.
|
|
||||||
|
|
||||||
* sysdeps/linux/glibtop_machine.h: New file.
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: Performance optimizations. We now use
|
|
||||||
`open' and `read' instead of `fopen' and `fscanf'.
|
|
||||||
|
|
||||||
* *.[ch]: Using single underscore instead of two underscores
|
|
||||||
for function prefixes (regexp: ``s,__([rspl])\b,_$1,g'') to
|
|
||||||
avoid ambiguity with mangled C++ names.
|
|
||||||
|
|
||||||
1998-06-06 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* sysdeps/osf1/glibtop_server.h: New file.
|
|
||||||
|
|
||||||
* sysdeps/osf1/*.c: renamed all functions implementing
|
|
||||||
features that don't need to be suid to '__s'.
|
|
||||||
|
|
||||||
* sysdeps/names/procdata.c: Removed that file.
|
|
||||||
|
|
||||||
* include/glibtop/*.h (glibtop_types_*): Changed declaration.
|
|
||||||
|
|
||||||
* glibtop.h: Added `#include <types.h>'.
|
|
||||||
|
|
||||||
* include/glibtop/types.h: New file - numeric constants
|
|
||||||
for `glibtop_types_<feature>'.
|
|
||||||
|
|
||||||
* sysdeps/names/*.c (glibtop_types_*): Using numeric
|
|
||||||
constants from `types.h' instead of string constants.
|
|
||||||
|
|
||||||
1998-06-05 Martin Baulig <baulig@taurus.uni-trier.de>
|
1998-06-05 Martin Baulig <baulig@taurus.uni-trier.de>
|
||||||
|
|
||||||
* support: removed that directory.
|
* support: removed that directory.
|
||||||
@@ -578,99 +36,6 @@
|
|||||||
|
|
||||||
* src/server/main.c: #include <locale.h>
|
* src/server/main.c: #include <locale.h>
|
||||||
|
|
||||||
1998-06-02 Martin Baulig <baulig@merkur.uni-trier.de>
|
|
||||||
|
|
||||||
* lib/open.c (glibtop_open): renamed to `glibtop_open__l'.
|
|
||||||
|
|
||||||
* sysdeps/linux/open.c (glibtop_open): renamed to
|
|
||||||
`glibtop_open__r'.
|
|
||||||
|
|
||||||
* include/glibtop/open.h (GLIBTOP_OPEN_NO_OVERRIDE):
|
|
||||||
tells `glibtop_open' to use the default server and not
|
|
||||||
to check the environment variables.
|
|
||||||
|
|
||||||
* include/glibtop/sysdeps.h (_glibtop_sysdeps):
|
|
||||||
renamed 'dummy' member to 'features'.
|
|
||||||
|
|
||||||
* src/proxy/*: new directory - proxy server.
|
|
||||||
|
|
||||||
* include/glibtop/command.h (GLIBTOP_CMND_SYSDEPS):
|
|
||||||
added definition here.
|
|
||||||
|
|
||||||
* src/server/main.c (GLIBTOP_CMND_SYSDEPS): new
|
|
||||||
command to get glibtop_server_features.
|
|
||||||
|
|
||||||
1998-06-01 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* NEWS: added more detailed description of today's and
|
|
||||||
yesterday's changes.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: to use the ChangeLog entry from May 28:
|
|
||||||
'__l' is a function defined in the client part;
|
|
||||||
'__s' is a function defined in the sysdeps part and
|
|
||||||
'__p' is a function that needs special priviledges.
|
|
||||||
'__r' is mapped either on '__p' or on '__s'.
|
|
||||||
the function without suffix is mapped on '__l'.
|
|
||||||
|
|
||||||
* sysdeps/common/sysdeps.c: now using '__r' functions,
|
|
||||||
they are #defined either as the '__p' or the '__s' ones.
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: changed call of 'glibtop_init__r',
|
|
||||||
it now takes two additional arguments.
|
|
||||||
|
|
||||||
* examples/{first.c, second.c}: now using 'glibtop_init'
|
|
||||||
instead of 'glibtop_init__r'.
|
|
||||||
|
|
||||||
* include/glibtop/sysdeps.h: added 'dummy' member so
|
|
||||||
'GLIBTOP_SYSDEPS_<feature>' now start with 1.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: we now #define 'glibtop_get_<feature>'
|
|
||||||
as 'glibtop_get_<feature>__l' and 'glibtop_get_<feature>__r'
|
|
||||||
either as the '__p' or the '__s' function.
|
|
||||||
|
|
||||||
* lib/*.c: removed #if's - we now decide at runtime
|
|
||||||
whether to use the server or to call the appropriate
|
|
||||||
function for the sysdeps directory.
|
|
||||||
|
|
||||||
1998-05-28 Martin Baulig <baulig@merkur.uni-trier.de>
|
|
||||||
|
|
||||||
* src/server/main.c: we now use the '__p' functions,
|
|
||||||
but only if the appropriate 'GLIBTOP_SUID_<feature>'
|
|
||||||
has a non-zero value.
|
|
||||||
|
|
||||||
* configure.in (@machine_incs@): always use
|
|
||||||
`-I$(top_srcdir)/sysdeps/@sysdeps_dir@'; it's no
|
|
||||||
longer conditional.
|
|
||||||
|
|
||||||
* examples/Makefile.am: removed the '_linux' examples.
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: renamed all functions implementing
|
|
||||||
features to '__s'.
|
|
||||||
|
|
||||||
* lib/*.c: renamed all functions implementing features
|
|
||||||
to '__l'; we only emit code for those functions if the
|
|
||||||
corresponding 'GLIBTOP_SUID_<feature>' has a positive value.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: added some new function suffixes:
|
|
||||||
'__l' is a function defined in the client part;
|
|
||||||
'__s' is a function defined in the sysdeps part and
|
|
||||||
'__p' is a function that needs special priviledges.
|
|
||||||
'__r' is mapped either on '__l' or on '__s'.
|
|
||||||
|
|
||||||
* sysdeps/linux/glibtop_server.h: New file -
|
|
||||||
defines system dependent constants 'GLIBTOP_SUID_<feature>'
|
|
||||||
being either 'GLIBTOP_SYSDEPS_<feature>'+1 depending upon
|
|
||||||
whether or not this feature requires using the server.
|
|
||||||
|
|
||||||
* lib/sysdeps.c: removed that file; it is no longer
|
|
||||||
needed.
|
|
||||||
|
|
||||||
1998-05-25 Martin Baulig <baulig@merkur.uni-trier.de>
|
|
||||||
|
|
||||||
* src/server/main.c: Fixed `broken pipe' error when server
|
|
||||||
is running SUID; accidentally uses setreuid () instead of
|
|
||||||
setregid ().
|
|
||||||
|
|
||||||
1998-05-24 Martin Baulig <martin@home-of-linux.org>
|
1998-05-24 Martin Baulig <martin@home-of-linux.org>
|
||||||
|
|
||||||
* sysdeps/sun4/{open.c, mem.c, glibtop_machine.h}: added
|
* sysdeps/sun4/{open.c, mem.c, glibtop_machine.h}: added
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
LIBGTOP_MAJOR_VERSION=0
|
|
||||||
LIBGTOP_MINOR_VERSION=2a
|
|
||||||
LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION
|
|
||||||
|
|
||||||
# For automake.
|
|
||||||
VERSION=$LIBGTOP_VERSION
|
|
||||||
PACKAGE=libgtop
|
|
50
Makefile.am
50
Makefile.am
@@ -1,18 +1,14 @@
|
|||||||
## Process this file with automake to produce Makefile.in.
|
## Process this file with automake to produce Makefile.in.
|
||||||
|
|
||||||
examples_SUBDIRS = examples
|
if GLIBTOP_EXAMPLES
|
||||||
|
examples_SUBDIRS = examples
|
||||||
if GUILE
|
|
||||||
guile_SUBDIRS = guile
|
|
||||||
else
|
|
||||||
guile_SUBDIRS =
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
built_SUBDIRS = include sysdeps src lib
|
||||||
|
|
||||||
SUBDIRS = po intl support macros include sysdeps lib src \
|
SUBDIRS = po intl macros $(built_SUBDIRS) $(examples_SUBDIRS)
|
||||||
$(guile_subdirs) $(examples_SUBDIRS)
|
|
||||||
|
|
||||||
DIST_SUBDIRS = po intl macros include sysdeps src lib guile examples
|
DIST_SUBDIRS = po intl macros include sysdeps src lib examples
|
||||||
|
|
||||||
include_HEADERS = glibtop.h
|
include_HEADERS = glibtop.h
|
||||||
|
|
||||||
@@ -26,9 +22,6 @@ release:
|
|||||||
confexecdir=$(libdir)
|
confexecdir=$(libdir)
|
||||||
confexec_DATA = $(top_builddir)/libgtopConf.sh
|
confexec_DATA = $(top_builddir)/libgtopConf.sh
|
||||||
|
|
||||||
noinst_DATA = $(top_builddir)/perl/Makefile.PL \
|
|
||||||
$(top_builddir)/perl/Libgtop.xs
|
|
||||||
|
|
||||||
## to automatically rebuild aclocal.m4 if any of the macros in
|
## to automatically rebuild aclocal.m4 if any of the macros in
|
||||||
## `macros/' change
|
## `macros/' change
|
||||||
@MAINT@include macros/macros.dep
|
@MAINT@include macros/macros.dep
|
||||||
@@ -40,31 +33,6 @@ noinst_DATA = $(top_builddir)/perl/Makefile.PL \
|
|||||||
## the value NONE in configure if the user doesn't specify them (this
|
## the value NONE in configure if the user doesn't specify them (this
|
||||||
## is an autoconf feature, not a bug).
|
## is an autoconf feature, not a bug).
|
||||||
libgtopConf.sh: libgtopConf.sh.in Makefile
|
libgtopConf.sh: libgtopConf.sh.in Makefile
|
||||||
## Use sed and then mv to avoid problems if the user interrupts.
|
|
||||||
sed -e 's,\@LIBGTOP_LIBDIR\@,$(libdir),g' \
|
|
||||||
-e 's,\@LIBGTOP_INCLUDEDIR\@,$(includedir),g' \
|
|
||||||
-e 's,\@LIBGTOP_LIBS\@,$(LIBGTOP_LIBS),g' \
|
|
||||||
-e 's,\@LIBGTOP_INCS\@,$(LIBGTOP_INCS),g' \
|
|
||||||
-e 's,\@LIBGTOP_NAMES_LIBS\@,$(LIBGTOP_NAMES_LIBS),g' \
|
|
||||||
-e 's,\@LIBGTOP_NAMES_INCS\@,$(LIBGTOP_NAMES_INCS),g' \
|
|
||||||
-e 's,\@LIBGTOP_GUILE_LIBS\@,$(LIBGTOP_GUILE_LIBS),g' \
|
|
||||||
-e 's,\@LIBGTOP_GUILE_INCS\@,$(LIBGTOP_GUILE_INCS),g' \
|
|
||||||
-e 's,\@LIBGTOP_GUILE_NAMES_LIBS\@,$(LIBGTOP_GUILE_NAMES_LIBS),g' \
|
|
||||||
-e 's,\@LIBGTOP_GUILE_NAMES_INCS\@,$(LIBGTOP_GUILE_NAMES_INCS),g' \
|
|
||||||
-e 's,\@LIBGTOP_BINDIR\@,$(LIBGTOP_BINDIR),g' \
|
|
||||||
-e 's,\@LIBGTOP_SERVER\@,$(LIBGTOP_SERVER),g' \
|
|
||||||
-e 's,\@LIBGTOP_MAJOR_VERSION\@,$(LIBGTOP_MAJOR_VERSION),g' \
|
|
||||||
-e 's,\@LIBGTOP_MINOR_VERSION\@,$(LIBGTOP_MINOR_VERSION),g' \
|
|
||||||
-e 's,\@LIBGTOP_VERSION\@,$(LIBGTOP_VERSION),g' \
|
|
||||||
-e 's,\@libgtop_sysdeps_dir\@,$(libgtop_sysdeps_dir),g' \
|
|
||||||
-e 's,\@libgtop_need_server\@,$(libgtop_need_server),g' \
|
|
||||||
-e 's,\@libgtop_use_machine_h\@,$(libgtop_use_machine_h),g' \
|
|
||||||
-e 's,\@libgtop_guile_found\@,$(libgtop_guile_found),g' \
|
|
||||||
-e 's,\@libgtop_want_examples\@,$(libgtop_want_examples),g' \
|
|
||||||
< $(srcdir)/libgtopConf.sh.in > libgtopConf.tmp \
|
|
||||||
&& mv libgtopConf.tmp libgtopConf.sh
|
|
||||||
|
|
||||||
perl/Makefile.PL: perl/Makefile.PL.in Makefile
|
|
||||||
## Use sed and then mv to avoid problems if the user interrupts.
|
## Use sed and then mv to avoid problems if the user interrupts.
|
||||||
sed -e 's,\@LIBGTOP_LIBDIR\@,$(libdir),g' \
|
sed -e 's,\@LIBGTOP_LIBDIR\@,$(libdir),g' \
|
||||||
-e 's,\@LIBGTOP_INCLUDEDIR\@,$(includedir),g' \
|
-e 's,\@LIBGTOP_INCLUDEDIR\@,$(includedir),g' \
|
||||||
@@ -81,9 +49,5 @@ perl/Makefile.PL: perl/Makefile.PL.in Makefile
|
|||||||
-e 's,\@libgtop_want_names\@,$(libgtop_want_names),g' \
|
-e 's,\@libgtop_want_names\@,$(libgtop_want_names),g' \
|
||||||
-e 's,\@libgtop_want_guile_names\@,$(libgtop_want_guile_names),g' \
|
-e 's,\@libgtop_want_guile_names\@,$(libgtop_want_guile_names),g' \
|
||||||
-e 's,\@libgtop_want_examples\@,$(libgtop_want_examples),g' \
|
-e 's,\@libgtop_want_examples\@,$(libgtop_want_examples),g' \
|
||||||
< $(srcdir)/perl/Makefile.PL.in > perl/Makefile.tmp \
|
< $(srcdir)/libgtopConf.sh.in > libgtopConf.tmp \
|
||||||
&& mv perl/Makefile.tmp perl/Makefile.PL
|
&& mv libgtopConf.tmp libgtopConf.sh
|
||||||
|
|
||||||
perl/Libgtop.xs: perl/perl.awk $(top_builddir)/config.h $(top_srcdir)/features.def
|
|
||||||
$(AWK) -f $(top_srcdir)/perl/perl.awk < $(top_srcdir)/features.def > perl/lgt-t
|
|
||||||
mv perl/lgt-t perl/Libgtop.xs
|
|
||||||
|
111
NEWS
111
NEWS
@@ -1,116 +1,5 @@
|
|||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
Jun/01/1998
|
|
||||||
===========
|
|
||||||
|
|
||||||
* We have some new ``suffix rules'':
|
|
||||||
|
|
||||||
'__l' is a function defined in the client part;
|
|
||||||
'__s' is a function defined in the sysdeps part and
|
|
||||||
'__p' is a function that needs special priviledges.
|
|
||||||
'__r' is mapped either on '__p' or on '__s'.
|
|
||||||
the function without suffix is mapped on '__l'.
|
|
||||||
|
|
||||||
* We now decide at runtime whether or not using the server
|
|
||||||
is required for a particular function. All user programs
|
|
||||||
now call the '__l' function defined in '-lgtop' (in the lib
|
|
||||||
subdir). These functions either use 'glibtop_call__l' to
|
|
||||||
call the server or call the '__r' function.
|
|
||||||
|
|
||||||
* A function in the sysdeps directory now has the '__s' suffix
|
|
||||||
if it do not need any priviledges (and thus can be called directly
|
|
||||||
from client code) and the '__p' suffix otherwise (when it has to
|
|
||||||
be called from the server).
|
|
||||||
|
|
||||||
* If you call one of these functions:
|
|
||||||
|
|
||||||
-> use the '__p' suffix to be sure to get the SUID-safe one
|
|
||||||
(used in the server).
|
|
||||||
-> use the '__s' suffix to be sure to get a function that
|
|
||||||
doesn't need any priviledges.
|
|
||||||
-> use the '__r' suffix otherwise (it is mapped either on the
|
|
||||||
'__p' or on the '__s' one).
|
|
||||||
|
|
||||||
Only use the '__p' and '__s' functions in a 'GLIBTOP_SUID_<feature>'
|
|
||||||
conditional, otherwise you'll get undefined symbols !
|
|
||||||
|
|
||||||
* The server is now started from 'glibtop_init__r', but only when
|
|
||||||
it's really needed; for instance on DEC OSF/1 you only need it
|
|
||||||
for the proc* features - if you program only fetches the CPU usage,
|
|
||||||
now server will be started.
|
|
||||||
|
|
||||||
* Sorry, at the moment everything is a little bit unstable, I'm doing
|
|
||||||
heavy changes. I've just some great ideas which still need some work:
|
|
||||||
|
|
||||||
-> I want to have a SUID server that only implements those features
|
|
||||||
that need to be SUID; everything else uses the sysdeps code directly.
|
|
||||||
|
|
||||||
-> If a program only uses stuff that do not need the server, the
|
|
||||||
server will not be started at all.
|
|
||||||
|
|
||||||
-> I'm working on some kind of proxy server that can be used on a remote
|
|
||||||
host; in feature one can then use the MDI stuff from ghex in gtop to
|
|
||||||
have notebook pages displaying processes from different hosts.
|
|
||||||
|
|
||||||
* Well it is as much unstable that it only works under Linux at the moment.
|
|
||||||
|
|
||||||
1998-06-01 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* sysdeps/common/sysdeps.c: now using '__r' functions,
|
|
||||||
they are #defined either as the '__p' or the '__s' ones.
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: changed call of 'glibtop_init__r',
|
|
||||||
it now takes two additional arguments.
|
|
||||||
|
|
||||||
* examples/{first.c, second.c}: now using 'glibtop_init'
|
|
||||||
instead of 'glibtop_init__r'.
|
|
||||||
|
|
||||||
* include/glibtop/sysdeps.h: added 'dummy' member so
|
|
||||||
'GLIBTOP_SYSDEPS_<feature>' now start with 1.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: we now #define 'glibtop_get_<feature>'
|
|
||||||
as 'glibtop_get_<feature>__l' and 'glibtop_get_<feature>__r'
|
|
||||||
either as the '__p' or the '__s' function.
|
|
||||||
|
|
||||||
* lib/*.c: removed #if's - we now decide at runtime
|
|
||||||
whether to use the server or to call the appropriate
|
|
||||||
function for the sysdeps directory.
|
|
||||||
|
|
||||||
1998-05-28 Martin Baulig <baulig@merkur.uni-trier.de>
|
|
||||||
|
|
||||||
* src/server/main.c: we now use the '__p' functions,
|
|
||||||
but only if the appropriate 'GLIBTOP_SUID_<feature>'
|
|
||||||
has a non-zero value.
|
|
||||||
|
|
||||||
* configure.in (@machine_incs@): always use
|
|
||||||
`-I$(top_srcdir)/sysdeps/@sysdeps_dir@'; it's no
|
|
||||||
longer conditional.
|
|
||||||
|
|
||||||
* examples/Makefile.am: removed the '_linux' examples.
|
|
||||||
|
|
||||||
* sysdeps/linux/*.c: renamed all functions implementing
|
|
||||||
features to '__s'.
|
|
||||||
|
|
||||||
* lib/*.c: renamed all functions implementing features
|
|
||||||
to '__l'; we only emit code for those functions if the
|
|
||||||
corresponding 'GLIBTOP_SUID_<feature>' has a positive value.
|
|
||||||
|
|
||||||
* include/glibtop/*.h: added some new function suffixes:
|
|
||||||
'__l' is a function defined in the client part;
|
|
||||||
'__s' is a function defined in the sysdeps part and
|
|
||||||
'__p' is a function that needs special priviledges.
|
|
||||||
'__r' is mapped either on '__l' or on '__s'.
|
|
||||||
|
|
||||||
* sysdeps/linux/glibtop_server.h: New file -
|
|
||||||
defines system dependent constants 'GLIBTOP_SUID_<feature>'
|
|
||||||
being either 'GLIBTOP_SYSDEPS_<feature>'+1 depending upon
|
|
||||||
whether or not this feature requires using the server.
|
|
||||||
|
|
||||||
* lib/sysdeps.c: removed that file; it is no longer
|
|
||||||
needed.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
May/21/1998
|
May/21/1998
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
90
acconfig.h
90
acconfig.h
@@ -12,92 +12,10 @@
|
|||||||
|
|
||||||
/* Do not remove this comments and the empty lines; they are needed */
|
/* Do not remove this comments and the empty lines; they are needed */
|
||||||
#undef HAVE_PROGRAM_INVOCATION_SHORT_NAME
|
#undef HAVE_PROGRAM_INVOCATION_SHORT_NAME
|
||||||
/* Define if you have the Andrew File System. */
|
|
||||||
#undef AFS
|
|
||||||
|
|
||||||
/* Define one of the following to indicate how a program can
|
|
||||||
get a list of mounted filesystems. */
|
|
||||||
|
|
||||||
/* Define if there is no specific function for reading the list of
|
|
||||||
mounted filesystems. fread will be used to read /etc/mnttab. [SVR2] */
|
|
||||||
#undef MOUNTED_FREAD
|
|
||||||
|
|
||||||
/* Define if (like SVR2) there is no specific function for reading the
|
|
||||||
list of mounted filesystems, and your system has these header files:
|
|
||||||
<sys/fstyp.h> and <sys/statfs.h>. [SVR3] */
|
|
||||||
#undef MOUNTED_FREAD_FSTYP
|
|
||||||
|
|
||||||
/* Define if there is a function named getfsstat for reading the list
|
|
||||||
of mounted filesystems. [DEC Alpha running OSF/1] */
|
|
||||||
#undef MOUNTED_GETFSSTAT
|
|
||||||
|
|
||||||
/* Define if there is a function named getmnt for reading the list of
|
|
||||||
mounted filesystems. [Ultrix] */
|
|
||||||
#undef MOUNTED_GETMNT
|
|
||||||
|
|
||||||
/* Define if there is a function named getmntent for reading the list
|
|
||||||
of mounted filesystems, and that function takes a single argument.
|
|
||||||
[4.3BSD, SunOS, HP-UX, Dynix, Irix] */
|
|
||||||
#undef MOUNTED_GETMNTENT1
|
|
||||||
|
|
||||||
/* Define if there is a function named getmntent for reading the list of
|
|
||||||
mounted filesystems, and that function takes two arguments. [SVR4] */
|
|
||||||
#undef MOUNTED_GETMNTENT2
|
|
||||||
|
|
||||||
/* Define if there is a function named getmntinfo for reading the list
|
|
||||||
of mounted filesystems. [4.4BSD] */
|
|
||||||
#undef MOUNTED_GETMNTINFO
|
|
||||||
|
|
||||||
/* Define if there is a function named listmntent that can be used to
|
|
||||||
list all mounted filesystems. [UNICOS] */
|
|
||||||
#undef MOUNTED_LISTMNTENT
|
|
||||||
|
|
||||||
/* Define if there is a function named mntctl that can be used to read
|
|
||||||
the list of mounted filesystems, and there is a system header file
|
|
||||||
that declares `struct vmount.' [AIX] */
|
|
||||||
#undef MOUNTED_VMOUNT
|
|
||||||
|
|
||||||
/* Define one of the following to indicate how a program can obtain
|
|
||||||
filesystems usage information. */
|
|
||||||
|
|
||||||
/* Define if statfs takes 3 args. [DEC Alpha running OSF/1] */
|
|
||||||
#undef STAT_STATFS3_OSF1
|
|
||||||
|
|
||||||
/* Define if there is no specific function for reading filesystems usage
|
|
||||||
information and you have the <sys/filsys.h> header file. [SVR2] */
|
|
||||||
#undef STAT_READ_FILSYS
|
|
||||||
|
|
||||||
/* Define if statfs takes 2 args and struct statfs has a field named f_bsize.
|
|
||||||
[4.3BSD, SunOS 4, HP-UX, AIX PS/2] */
|
|
||||||
#undef STAT_STATFS2_BSIZE
|
|
||||||
|
|
||||||
/* Define if statfs takes 2 args and struct statfs has a field named f_fsize.
|
|
||||||
[4.4BSD, NetBSD] */
|
|
||||||
#undef STAT_STATFS2_FSIZE
|
|
||||||
|
|
||||||
/* Define if statfs takes 2 args and the second argument has
|
|
||||||
type struct fs_data. [Ultrix] */
|
|
||||||
#undef STAT_STATFS2_FS_DATA
|
|
||||||
|
|
||||||
/* Define if statfs takes 4 args. [SVR3, Dynix, Irix, Dolphin] */
|
|
||||||
#undef STAT_STATFS4
|
|
||||||
|
|
||||||
/* Define if there is a function named statvfs. [SVR4] */
|
|
||||||
#undef STAT_STATVFS
|
|
||||||
|
|
||||||
/* Define if the block counts reported by statfs may be truncated to 2GB
|
|
||||||
and the correct values may be stored in the f_spare array.
|
|
||||||
[SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem.
|
|
||||||
SunOS 4.1.1 seems not to be affected.] */
|
|
||||||
#undef STATFS_TRUNCATES_BLOCK_COUNTS
|
|
||||||
|
|
||||||
|
|
||||||
/* to fix a bug in autoheader on DEC OSF1. */
|
/* to fix a bug in autoheader on DEC OSF1. */
|
||||||
#undef HAVE_PROGRAM_INVOCATION_NAME
|
#undef HAVE_PROGRAM_INVOCATION_NAME
|
||||||
|
|
||||||
#undef HAVE_SOCKETS
|
|
||||||
#undef HAVE_SOCKADDR_SUN_LEN
|
|
||||||
|
|
||||||
#undef HAVE_LIBJPEG
|
#undef HAVE_LIBJPEG
|
||||||
#undef HAVE_LIBGIF
|
#undef HAVE_LIBGIF
|
||||||
#undef HAVE_LIBTIFF
|
#undef HAVE_LIBTIFF
|
||||||
@@ -106,10 +24,7 @@
|
|||||||
#undef GNOME_ENABLE_DEBUG
|
#undef GNOME_ENABLE_DEBUG
|
||||||
#undef HAVE_GMP2_INCLUDE_DIR
|
#undef HAVE_GMP2_INCLUDE_DIR
|
||||||
#undef HAVE_GUILE
|
#undef HAVE_GUILE
|
||||||
|
|
||||||
#undef ssize_t
|
#undef ssize_t
|
||||||
#undef u_int64_t
|
|
||||||
#undef int64_t
|
|
||||||
|
|
||||||
#undef HAVE_GLIBTOP_MACHINE_H
|
#undef HAVE_GLIBTOP_MACHINE_H
|
||||||
|
|
||||||
@@ -118,8 +33,3 @@
|
|||||||
#undef GLIBTOP_EXAMPLES
|
#undef GLIBTOP_EXAMPLES
|
||||||
|
|
||||||
#undef NEED_LIBGTOP
|
#undef NEED_LIBGTOP
|
||||||
|
|
||||||
#undef HAVE_LINUX_TABLE
|
|
||||||
|
|
||||||
#undef HAVE_XAUTH
|
|
||||||
|
|
||||||
|
91
acinclude.m4
91
acinclude.m4
@@ -10,6 +10,97 @@ dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|||||||
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
dnl PARTICULAR PURPOSE.
|
dnl PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
AC_DEFUN([AC_LC_CANONICAL_HOST],[
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
# The way shlib-versions is used to generate soversions.mk uses a
|
||||||
|
# fairly simplistic model for name recognition that can't distinguish
|
||||||
|
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
||||||
|
# of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
|
||||||
|
# tell. This doesn't get used much beyond that, so it's fairly safe.
|
||||||
|
case "$host_os" in
|
||||||
|
linux*)
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([AC_LC_SYSDEPS],[
|
||||||
|
AC_REQUIRE([AC_LC_CANONICAL_HOST])
|
||||||
|
AC_REQUIRE([GNOME_LIBGTOP_SYSDEPS])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether we need the gtop_server)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libgtop-server,
|
||||||
|
[ --enable-libgtop-server use gtop_server [default=auto]],
|
||||||
|
[if test "x$enableval" = "xyes" ; then
|
||||||
|
libgtop_need_server=yes
|
||||||
|
elif test "x$enableval" = "xno" ; then
|
||||||
|
libgtop_need_server=no
|
||||||
|
fi])
|
||||||
|
|
||||||
|
AC_MSG_RESULT($libgtop_need_server)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether building of libgtop names is requested)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libgtop-names,
|
||||||
|
[ --enable-libgtop-names enable building of 'names' subdirs [default=yes]],
|
||||||
|
[if test "x$enableval" = "xyes" ; then
|
||||||
|
libgtop_want_names=yes
|
||||||
|
else
|
||||||
|
libgtop_want_names=$enableval
|
||||||
|
fi],[libgtop_want_names=yes])
|
||||||
|
|
||||||
|
AC_MSG_RESULT($libgtop_want_names)
|
||||||
|
|
||||||
|
if test x$libgtop_want_names = xyes ; then
|
||||||
|
AC_DEFINE(GLIBTOP_NAMES)
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(GLIBTOP_NAMES, test x$libgtop_want_names = xyes)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether building of the guile interface is requested)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libgtop-guile,
|
||||||
|
[ --enable-libgtop-guile enable building of the guile interface [default=yes]],
|
||||||
|
[if test "x$enableval" = "xyes" ; then
|
||||||
|
libgtop_want_guile=yes
|
||||||
|
else
|
||||||
|
libgtop_want_guile=$enableval
|
||||||
|
fi],[libgtop_want_guile=yes])
|
||||||
|
|
||||||
|
AC_MSG_RESULT($libgtop_want_guile)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether building of the examples is requested)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(libgtop-examples,
|
||||||
|
[ --disable-libgtop-examples disable building of the examples],
|
||||||
|
[if test "x$enableval" = "xyes" ; then
|
||||||
|
libgtop_want_examples=yes
|
||||||
|
else
|
||||||
|
libgtop_want_examples=$enableval
|
||||||
|
fi],[libgtop_want_examples=yes])
|
||||||
|
|
||||||
|
AC_MSG_RESULT($libgtop_want_examples)
|
||||||
|
|
||||||
|
if test x$libgtop_want_examples = xyes ; then
|
||||||
|
AC_DEFINE(GLIBTOP_EXAMPLES)
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(GLIBTOP_EXAMPLES, test x$libgtop_want_examples = xyes)
|
||||||
|
|
||||||
|
if test x$libgtop_use_machine_h = xyes ; then
|
||||||
|
machine_incs="-I\$(top_srcdir)/sysdeps/$sysdeps_dir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(machine_incs)
|
||||||
|
AC_SUBST(libgtop_want_names)
|
||||||
|
AC_SUBST(libgtop_want_guile)
|
||||||
|
AC_SUBST(libgtop_want_examples)
|
||||||
|
])
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# progtest.m4 from gettext 0.32
|
# progtest.m4 from gettext 0.32
|
||||||
######################################################################
|
######################################################################
|
||||||
|
203
configure.in
203
configure.in
@@ -4,29 +4,19 @@ dnl
|
|||||||
|
|
||||||
AC_INIT(copyright.txt)
|
AC_INIT(copyright.txt)
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
AC_CANONICAL_SYSTEM
|
|
||||||
|
|
||||||
. $srcdir/LIBGTOP-VERSION
|
AM_INIT_AUTOMAKE(libgtop, 0.01)
|
||||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
|
||||||
|
|
||||||
AC_SUBST(LIBGTOP_MAJOR_VERSION)
|
AM_MAINTAINER_MODE
|
||||||
AC_SUBST(LIBGTOP_MINOR_VERSION)
|
|
||||||
AC_SUBST(LIBGTOP_VERSION)
|
|
||||||
|
|
||||||
AM_ACLOCAL_INCLUDE(macros)
|
AM_ACLOCAL_INCLUDE(macros)
|
||||||
|
|
||||||
AC_ISC_POSIX
|
AC_CANONICAL_HOST
|
||||||
AC_PROG_CC
|
|
||||||
AC_STDC_HEADERS
|
|
||||||
AC_ARG_PROGRAM
|
|
||||||
|
|
||||||
dnl We don't use `AC_PROG_AWK' since it checks for mawk first which
|
|
||||||
dnl does not work for libgtop.
|
|
||||||
AC_CHECK_PROGS(AWK, gawk awk, )
|
|
||||||
test -z "$AWK" && AC_MSG_ERROR([Sorry, you need a working awk interpreter.])
|
|
||||||
|
|
||||||
AC_CHECK_TOOL(CC,gcc)
|
AC_CHECK_TOOL(CC,gcc)
|
||||||
|
AC_CHECK_TOOL(CXX,g++)
|
||||||
AC_CHECK_TOOL(RANLIB,ranlib)
|
AC_CHECK_TOOL(RANLIB,ranlib)
|
||||||
|
AC_CHECK_TOOL(LD,ld)
|
||||||
AC_CHECK_TOOL(AS,as)
|
AC_CHECK_TOOL(AS,as)
|
||||||
AC_CHECK_TOOL(AR,ar)
|
AC_CHECK_TOOL(AR,ar)
|
||||||
AC_CHECK_TOOL(NM,nm)
|
AC_CHECK_TOOL(NM,nm)
|
||||||
@@ -34,36 +24,24 @@ AC_CHECK_TOOL(NM,nm)
|
|||||||
NM=`which $NM`
|
NM=`which $NM`
|
||||||
export CC CXX RANLIB LD AS AR NM
|
export CC CXX RANLIB LD AS AR NM
|
||||||
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_LN_S
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
|
|
||||||
export cross_compiling
|
|
||||||
|
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
|
|
||||||
dnl If you want to use libgtop without gnome, comment the following line out.
|
dnl If you want to use libgtop without gnome, comment the following line out.
|
||||||
GNOME_INIT_HOOK(gnome_found=yes)
|
GNOME_INIT
|
||||||
|
|
||||||
if test "x$gnome_found" != xyes; then
|
AC_LC_SYSDEPS
|
||||||
GNOME_SUPPORT_CHECKS
|
|
||||||
|
if test x$libgtop_want_guile = xyes ; then
|
||||||
|
GNOME_CHECK_GUILE
|
||||||
|
if test x$ac_cv_guile_found = xyes ; then
|
||||||
|
if test x$libgtop_want_names = xyes ; then
|
||||||
|
AC_DEFINE(GLIBTOP_GUILE_NAMES)
|
||||||
|
fi
|
||||||
|
guile_examples='third third_static third_linux'
|
||||||
|
guile_subdirs='guile'
|
||||||
|
else
|
||||||
|
guile_examples=
|
||||||
|
guile_subdirs=
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
AM_CONDITIONAL(BUILD_GNOME_SUPPORT, false)
|
|
||||||
AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
|
|
||||||
fi
|
|
||||||
|
|
||||||
GNOME_LIBGTOP_SYSDEPS
|
|
||||||
GNOME_LIBGTOP_TYPES
|
|
||||||
|
|
||||||
GNOME_CHECK_GUILE
|
|
||||||
|
|
||||||
if test x$ac_cv_guile_found = xyes ; then
|
|
||||||
AC_DEFINE(GLIBTOP_GUILE_NAMES)
|
|
||||||
libgtop_guile_found=yes
|
|
||||||
guile_examples='third third_static'
|
|
||||||
guile_subdirs='guile'
|
|
||||||
else
|
|
||||||
libgtop_guile_found=no
|
|
||||||
guile_examples=
|
guile_examples=
|
||||||
guile_subdirs=
|
guile_subdirs=
|
||||||
fi
|
fi
|
||||||
@@ -71,6 +49,18 @@ fi
|
|||||||
AC_SUBST(guile_examples)
|
AC_SUBST(guile_examples)
|
||||||
AC_SUBST(guile_subdirs)
|
AC_SUBST(guile_subdirs)
|
||||||
|
|
||||||
|
AC_ISC_POSIX
|
||||||
|
AC_PROG_CXX
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_CPP
|
||||||
|
AC_STDC_HEADERS
|
||||||
|
AC_ARG_PROGRAM
|
||||||
|
AM_PROG_LEX
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_LN_S
|
||||||
|
AC_PROG_MAKE_SET
|
||||||
|
|
||||||
|
export cross_compiling
|
||||||
AM_PROG_LIBTOOL
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
dnl You need to uncomment the following line if you want to use libgtop without Gnome.
|
dnl You need to uncomment the following line if you want to use libgtop without Gnome.
|
||||||
@@ -97,21 +87,6 @@ AC_CHECK_LIB(kvm, kvm_open)
|
|||||||
dnl For DEC OSF1
|
dnl For DEC OSF1
|
||||||
AC_CHECK_LIB(mach, vm_statistics)
|
AC_CHECK_LIB(mach, vm_statistics)
|
||||||
|
|
||||||
dnl Check for Internet sockets.
|
|
||||||
AC_CHECK_FUNC(socket,
|
|
||||||
[AC_CHECK_HEADER(netinet/in.h,
|
|
||||||
[AC_CHECK_HEADER(arpa/inet.h, [
|
|
||||||
AC_DEFINE(HAVE_SOCKETS)
|
|
||||||
AC_MSG_CHECKING("for sun_len member in struct sockaddr_un")
|
|
||||||
AC_TRY_LINK([
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
],
|
|
||||||
[static struct sockaddr_un x; x.sun_len = 1;],
|
|
||||||
[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOCKADDR_SUN_LEN)],
|
|
||||||
[AC_MSG_RESULT(no)])])])])
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
dnl Checks for library functions.
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
AC_FUNC_MMAP
|
AC_FUNC_MMAP
|
||||||
@@ -119,34 +94,14 @@ AC_TYPE_SIGNAL
|
|||||||
AC_FUNC_STRFTIME
|
AC_FUNC_STRFTIME
|
||||||
AC_CHECK_FUNCS(getcwd gettimeofday getwd putenv strdup strtoul uname)
|
AC_CHECK_FUNCS(getcwd gettimeofday getwd putenv strdup strtoul uname)
|
||||||
|
|
||||||
ALL_LINGUAS="fr"
|
ALL_LINGUAS=""
|
||||||
AM_GNU_GETTEXT
|
AM_GNU_GETTEXT
|
||||||
|
|
||||||
AC_PATH_XTRA
|
CFLAGS="$CFLAGS -D_IN_LIBGTOP"
|
||||||
|
|
||||||
dnl The construct foo=`echo $w1 $w2 $w3` fails on some systems if $w1 = -e or -n
|
AC_SUBST(CFLAGS)
|
||||||
dnl So we use the following instead.
|
AC_SUBST(CPPFLAGS)
|
||||||
dnl XE_SPACE(var, words)
|
AC_SUBST(LDFLAGS)
|
||||||
define([XE_SPACE],[
|
|
||||||
T=""
|
|
||||||
for W in $2; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done
|
|
||||||
$1="$T"
|
|
||||||
])dnl
|
|
||||||
|
|
||||||
dnl Autodetect Xauth
|
|
||||||
dnl -lXau is only used by gnuclient, so use a special variable for Xauth X libs
|
|
||||||
test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no
|
|
||||||
test -z "$with_xauth" && { AC_CHECK_HEADER(X11/Xauth.h, ,with_xauth=no) }
|
|
||||||
test -z "$with_xauth" && { AC_CHECK_LIB(Xau, XauGetAuthByAddr,[:],with_xauth=no, $X_LIBS) }
|
|
||||||
test -z "$with_xauth" && with_xauth=yes
|
|
||||||
if test "$with_xauth" = "yes"; then
|
|
||||||
AC_DEFINE(HAVE_XAUTH)
|
|
||||||
XE_SPACE(libs_xauth, $X_LIBS -lXau)
|
|
||||||
fi
|
|
||||||
AC_SUBST(libs_xauth)
|
|
||||||
|
|
||||||
dnl For diskusage stuff
|
|
||||||
GNOME_FILEUTILS_CHECKS
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],AC_DEFINE(GNOME_ENABLE_DEBUG),)
|
AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],AC_DEFINE(GNOME_ENABLE_DEBUG),)
|
||||||
|
|
||||||
@@ -170,7 +125,7 @@ AC_SUBST(LIBSUPPORT)
|
|||||||
AC_SUBST(SUPPORTINCS)
|
AC_SUBST(SUPPORTINCS)
|
||||||
|
|
||||||
dnl These definitions are expanded in make.
|
dnl These definitions are expanded in make.
|
||||||
LIBGTOP_LIBS='-L$(libdir) -lgtop'
|
LIBGTOP_LIBS='-L$(libdir)'
|
||||||
LIBGTOP_INCS='-I$(includedir)'
|
LIBGTOP_INCS='-I$(includedir)'
|
||||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_LIBS"
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_LIBS"
|
||||||
LIBGTOP_GUILE_INCS="$LIBGTOP_INCS"
|
LIBGTOP_GUILE_INCS="$LIBGTOP_INCS"
|
||||||
@@ -189,69 +144,49 @@ fi
|
|||||||
|
|
||||||
AC_SUBST(libgtop_guile_found)
|
AC_SUBST(libgtop_guile_found)
|
||||||
|
|
||||||
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop_common -lgtop_sysdeps"
|
if test x$libgtop_want_names = xyes ; then
|
||||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_common -lgtop_sysdeps"
|
if test x$ac_cv_guile_found = xyes ; then
|
||||||
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_guile_names"
|
||||||
|
libgtop_want_guile_names=yes
|
||||||
|
else
|
||||||
|
libgtop_want_guile_names=no
|
||||||
|
fi
|
||||||
|
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop_names"
|
||||||
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_names"
|
||||||
|
fi
|
||||||
|
|
||||||
LIBGTOP_NAMES_LIBS="$LIBGTOP_LIBS -lgtop_names"
|
AC_SUBST(libgtop_want_guile_names)
|
||||||
LIBGTOP_GUILE_NAMES_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_guile_names"
|
|
||||||
LIBGTOP_GUILE_NAMES_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_names"
|
|
||||||
|
|
||||||
LIBGTOP_LIBS="$LIBGTOP_LIBS $libs_xauth"
|
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop_common"
|
||||||
LIBGTOP_NAMES_LIBS="$LIBGTOP_NAMES_LIBS $libs_xauth"
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_common"
|
||||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS $libs_xauth"
|
|
||||||
LIBGTOP_GUILE_NAMES_LIBS="$LIBGTOP_GUILE_NAMES_LIBS $libs_xauth"
|
|
||||||
|
|
||||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS $GUILE_LIBS"
|
if test "x$need_server" = "xyes" ; then
|
||||||
LIBGTOP_GUILE_INCS="$LIBGTOP_GUILE_INCS $GUILE_INCS -DGLIBTOP_GUILE"
|
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop"
|
||||||
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop"
|
||||||
|
else
|
||||||
|
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop_sysdeps"
|
||||||
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_sysdeps"
|
||||||
|
fi
|
||||||
|
|
||||||
LIBGTOP_NAMES_INCS="$LIBGTOP_INCS -DGLIBTOP_NAMES"
|
if test "x$ac_cv_guile_found" = "xyes" ; then
|
||||||
LIBGTOP_GUILE_NAMES_INCS="$LIBGTOP_GUILE_INCS -DGLIBTOP_GUILE_NAMES"
|
LIBGTOP_INCS="$LIBGTOP_INCS $GUILE_INCS"
|
||||||
LIBGTOP_GUILE_NAMES_INCS="$LIBGTOP_GUILE_INCS -DGLIBTOP_NAMES"
|
LIBGTOP_GUILE_INCS="$LIBGTOP_INCS $GUILE_INCS"
|
||||||
|
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS $GUILE_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
machine_incs="-I\$(top_srcdir)/sysdeps/$sysdeps_dir"
|
if test "x$libgtop_use_machine_h" = "xyes" ; then
|
||||||
|
machine_incs='-I$(top_srcdir)/sysdeps/@sysdeps_dir@'
|
||||||
|
fi
|
||||||
|
|
||||||
AC_SUBST(machine_incs)
|
AC_SUBST(machine_incs)
|
||||||
|
|
||||||
if test x$libgtop_guile_found = xyes ; then
|
|
||||||
guile_def="-DGLIBTOP_GUILE -DGLIBTOP_GUILE_NAMES $GUILE_INCS "
|
|
||||||
else
|
|
||||||
guile_def=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
INCLUDES="$CFLAGS -D_IN_LIBGTOP -D_GNU_SOURCE -DGLIBTOP_NAMES $guile_def -I\$(top_builddir) -I\$(top_srcdir) -I\$(top_srcdir)/sysdeps/$sysdeps_dir -I\$(top_srcdir)/include -I\$(top_srcdir)/intl "'-DGTOPLOCALEDIR=\"$(datadir)/locale\" -DLIBGTOP_VERSION=\"'"$LIBGTOP_VERSION"'\" -DLIBGTOP_SERVER=\"'"$LIBGTOP_SERVER"'\"'
|
|
||||||
|
|
||||||
AC_SUBST(INCLUDES)
|
|
||||||
|
|
||||||
AC_SUBST(LIBGTOP_LIBS)
|
AC_SUBST(LIBGTOP_LIBS)
|
||||||
AC_SUBST(LIBGTOP_INCS)
|
AC_SUBST(LIBGTOP_INCS)
|
||||||
AC_SUBST(LIBGTOP_NAMES_LIBS)
|
|
||||||
AC_SUBST(LIBGTOP_NAMES_INCS)
|
|
||||||
AC_SUBST(LIBGTOP_GUILE_LIBS)
|
AC_SUBST(LIBGTOP_GUILE_LIBS)
|
||||||
AC_SUBST(LIBGTOP_GUILE_INCS)
|
AC_SUBST(LIBGTOP_GUILE_INCS)
|
||||||
AC_SUBST(LIBGTOP_GUILE_NAMES_LIBS)
|
|
||||||
AC_SUBST(LIBGTOP_GUILE_NAMES_INCS)
|
|
||||||
AC_SUBST(LIBGTOP_BINDIR)
|
AC_SUBST(LIBGTOP_BINDIR)
|
||||||
AC_SUBST(LIBGTOP_SERVER)
|
AC_SUBST(LIBGTOP_SERVER)
|
||||||
|
|
||||||
LIBSUPPORT=
|
|
||||||
SUPPORTINCS=
|
|
||||||
if test "$need_gnome_support" = yes; then
|
|
||||||
if test "x$gnome_found" = xyes ; then
|
|
||||||
LIBSUPPORT="$GNOME_LIBDIR -lgnomesupport"
|
|
||||||
SUPPORTINCS="$GNOME_INCLUDEDIR"
|
|
||||||
else
|
|
||||||
LIBSUPPORT='$(top_builddir)/support/libgnomesupport.la'
|
|
||||||
SUPPORTINCS='-DNEED_GNOMESUPPORT_H -I$(top_builddir)/support -I$(top_srcdir)/support'
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x$libgtop_need_server = xyes ; then
|
|
||||||
sysdeps_suid_lib="\$(top_builddir)/sysdeps/\$(sysdeps_dir)/libgtop_sysdeps_suid.la"
|
|
||||||
else
|
|
||||||
sysdeps_suid_lib=
|
|
||||||
fi
|
|
||||||
AC_SUBST(sysdeps_suid_lib)
|
|
||||||
|
|
||||||
AC_OUTPUT([
|
AC_OUTPUT([
|
||||||
Makefile
|
Makefile
|
||||||
po/Makefile.in
|
po/Makefile.in
|
||||||
@@ -267,14 +202,8 @@ sysdeps/stub/Makefile
|
|||||||
sysdeps/sun4/Makefile
|
sysdeps/sun4/Makefile
|
||||||
sysdeps/osf1/Makefile
|
sysdeps/osf1/Makefile
|
||||||
sysdeps/linux/Makefile
|
sysdeps/linux/Makefile
|
||||||
sysdeps/kernel/Makefile
|
|
||||||
sysdeps/freebsd/Makefile
|
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/server/Makefile
|
src/server/Makefile
|
||||||
src/daemon/Makefile
|
|
||||||
lib/Makefile
|
lib/Makefile
|
||||||
guile/Makefile
|
|
||||||
examples/Makefile
|
examples/Makefile
|
||||||
perl/Makefile.PL
|
|
||||||
support/Makefile
|
|
||||||
macros/Makefile],[sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile])
|
macros/Makefile],[sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile])
|
||||||
|
@@ -1,10 +1,22 @@
|
|||||||
*.shml
|
*.shml
|
||||||
*.ced
|
|
||||||
.timestamp
|
.timestamp
|
||||||
.timestamp2
|
.timestamp2
|
||||||
.timestamp3
|
.timestamp3
|
||||||
.timestamp4
|
dbtohtml-1.shtml
|
||||||
|
dbtohtml-2.shtml
|
||||||
|
dbtohtml-3.shtml
|
||||||
|
dbtohtml.shtml
|
||||||
gnome-hackers
|
gnome-hackers
|
||||||
|
gnome-hackers.ced
|
||||||
libgtop
|
libgtop
|
||||||
|
libgtop-1.shtml
|
||||||
|
libgtop-2.shtml
|
||||||
|
libgtop-3.shtml
|
||||||
|
libgtop-4.shtml
|
||||||
|
libgtop-5.shtml
|
||||||
|
libgtop-INDEX.shtml
|
||||||
libgtop-ref
|
libgtop-ref
|
||||||
table
|
libgtop-ref.ced
|
||||||
|
libgtop.ced
|
||||||
|
libgtop.fot
|
||||||
|
libgtop.shtml
|
||||||
|
@@ -1,8 +0,0 @@
|
|||||||
1998-07-21 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* gnome-hackers.sgml: Added note that this file is
|
|
||||||
currently out of date and a link to the documentation
|
|
||||||
of the table () function.
|
|
||||||
|
|
||||||
* table.sgml: New file - basic documentation for the
|
|
||||||
table () system call.
|
|
29
doc/Makefile
29
doc/Makefile
@@ -1,37 +1,22 @@
|
|||||||
all: .timestamp .timestamp2 .timestamp3 .timestamp4
|
all: .timestamp .timestamp2 .timestamp3
|
||||||
|
|
||||||
clean:
|
|
||||||
-rm -f .timestamp*
|
|
||||||
-rm -rf libgtop gnome-hackers libgtop-ref table
|
|
||||||
|
|
||||||
.timestamp: libgtop.sgml
|
.timestamp: libgtop.sgml
|
||||||
-rm -rf libgtop
|
rm -rf libgtop
|
||||||
mkdir libgtop
|
mkdir libgtop
|
||||||
-rm -f .timestamp
|
jade -D /usr/lib/sgml/jade_dsl -d libgtop.dsl -t sgml \
|
||||||
jade -D /usr/lib/sgml -d libgtop.dsl -t sgml \
|
|
||||||
-V %no-make-index% libgtop.sgml > /dev/null && \
|
-V %no-make-index% libgtop.sgml > /dev/null && \
|
||||||
touch .timestamp
|
touch .timestamp
|
||||||
|
|
||||||
.timestamp2: gnome-hackers.sgml
|
.timestamp2: gnome-hackers.sgml
|
||||||
-rm -rf gnome-hackers
|
rm -rf gnome-hackers
|
||||||
mkdir gnome-hackers
|
mkdir gnome-hackers
|
||||||
-rm -f .timestamp2
|
jade -D /usr/lib/sgml/jade_dsl -d gnome-hackers.dsl -t sgml \
|
||||||
jade -D /usr/lib/sgml -d gnome-hackers.dsl -t sgml \
|
|
||||||
-V %no-make-index% gnome-hackers.sgml > /dev/null && \
|
-V %no-make-index% gnome-hackers.sgml > /dev/null && \
|
||||||
touch .timestamp2
|
touch .timestamp2
|
||||||
|
|
||||||
.timestamp3: libgtop-ref.sgml ../guile/reference.sgml
|
.timestamp3: libgtop-ref.sgml ../guile/reference.sgml
|
||||||
-rm -rf libgtop-ref
|
rm -rf libgtop-ref
|
||||||
mkdir libgtop-ref
|
mkdir libgtop-ref
|
||||||
-rm -f .timestamp3
|
jade -D /usr/lib/sgml/jade_dsl -d libgtop-ref.dsl -t sgml \
|
||||||
jade -D /usr/lib/sgml -d libgtop-ref.dsl -t sgml \
|
|
||||||
-V %no-make-index% libgtop-ref.sgml > /dev/null && \
|
-V %no-make-index% libgtop-ref.sgml > /dev/null && \
|
||||||
touch .timestamp3
|
touch .timestamp3
|
||||||
|
|
||||||
.timestamp4: table.sgml
|
|
||||||
-rm -rf table
|
|
||||||
mkdir table
|
|
||||||
-rm -f .timestamp4
|
|
||||||
jade -D /usr/lib/sgml -d table.dsl -t sgml \
|
|
||||||
-V %no-make-index% table.sgml > /dev/null && \
|
|
||||||
touch .timestamp4
|
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
|
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
|
||||||
<!entity libgtopConf.sh SYSTEM "../libgtopConf.sh" >
|
<!entity libgtopConf.sh SYSTEM "../libgtopConf.sh" >
|
||||||
<!entity home-of-linux "http://www.home-of-linux.org/">
|
|
||||||
]>
|
]>
|
||||||
<book>
|
<book>
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
@@ -52,8 +51,6 @@
|
|||||||
</legalnotice>
|
</legalnotice>
|
||||||
|
|
||||||
<abstract>
|
<abstract>
|
||||||
<para>
|
|
||||||
<literal>$Id$</literal>
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
This is a short introduction in how to use
|
This is a short introduction in how to use
|
||||||
@@ -62,24 +59,6 @@
|
|||||||
takes and the information stored in the automatically generated
|
takes and the information stored in the automatically generated
|
||||||
<filename>libgtopConf.sh</filename> configuration script.
|
<filename>libgtopConf.sh</filename> configuration script.
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>
|
|
||||||
This document is currently out of date.
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>
|
|
||||||
Documentation about the new <function>table ()</function>
|
|
||||||
function can be found here:
|
|
||||||
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>
|
|
||||||
<ulink url="&home-of-linux;kernel/table/">
|
|
||||||
&home-of-linux;kernel/table/
|
|
||||||
</ulink>
|
|
||||||
</itemizedlist>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
</abstract>
|
</abstract>
|
||||||
|
|
||||||
</bookinfo>
|
</bookinfo>
|
||||||
@@ -412,10 +391,3 @@
|
|||||||
|
|
||||||
|
|
||||||
</book>
|
</book>
|
||||||
|
|
||||||
<!--
|
|
||||||
Local Variables:
|
|
||||||
mode: sgml
|
|
||||||
sgml-indent-data: t
|
|
||||||
End:
|
|
||||||
-->
|
|
||||||
|
@@ -1,161 +0,0 @@
|
|||||||
Path: news.uni-stuttgart.de!fu-berlin.de!taurus.uni-trier.DE!baulig
|
|
||||||
From: Martin Baulig <baulig@merkur.uni-trier.de>
|
|
||||||
Newsgroups: comp.os.linux.development.system
|
|
||||||
Subject: RFC: New system call for /proc information ?
|
|
||||||
Date: 07 Jun 1998 20:22:47 +0200
|
|
||||||
Lines: 143
|
|
||||||
Sender: baulig@Taurus.uni-trier.de
|
|
||||||
Message-ID: <of7zpfprs08.fsf@Taurus.uni-trier.de>
|
|
||||||
NNTP-Posting-Host: taurus.uni-trier.de (136.199.14.201)
|
|
||||||
Mime-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=iso-8859-1
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
NNTP-Posting-User: baulig
|
|
||||||
X-Access: 16 1542 1543
|
|
||||||
X-Trace: fu-berlin.de 897243777 29527 baulig 136.199.14.201
|
|
||||||
X-Newsreader: Gnus v5.6.11/XEmacs 20.3 - "Vatican City"
|
|
||||||
Xref: news.uni-stuttgart.de comp.os.linux.development.system:73539
|
|
||||||
|
|
||||||
[Posted to the Gnome Mailing List and to comp.os.linux.development.system]
|
|
||||||
|
|
||||||
Request for Comments:
|
|
||||||
====================
|
|
||||||
|
|
||||||
Should we have a new system call under Linux which fetches information
|
|
||||||
from the /proc filesytem similar to the table() function of DEC OSF/1 ?
|
|
||||||
|
|
||||||
The whole story:
|
|
||||||
===============
|
|
||||||
|
|
||||||
I am currently working on libgtop, a library that fetches information
|
|
||||||
from the proc filesystem for user processes. This library uses a suid
|
|
||||||
server on system where this is required. On Linux, the information are
|
|
||||||
fetched directly from the proc filesystem.
|
|
||||||
|
|
||||||
Now, I made some profilings (fetches 50000 times cpu, memory, swap,
|
|
||||||
uptime and loadavg):
|
|
||||||
|
|
||||||
Each sample counts as 0.01 seconds.
|
|
||||||
% cumulative self self total
|
|
||||||
time seconds seconds calls ns/call ns/call name
|
|
||||||
91.86 348.03 348.03 read
|
|
||||||
3.07 359.67 11.64 open
|
|
||||||
0.67 362.22 2.55 close
|
|
||||||
0.16 363.55 0.62 memset
|
|
||||||
0.16 364.14 0.59 __ipc
|
|
||||||
0.03 368.84 0.12 vsscanf (iovsscanf.c:31)
|
|
||||||
0.01 374.49 0.05 sscanf (sscanf.c:28)
|
|
||||||
0.00 378.71 0.01 semctl (semctl.c:32)
|
|
||||||
0.00 378.73 0.01 shmctl (shmctl.c:30)
|
|
||||||
|
|
||||||
granularity: each sample hit covers 4 byte(s) for 0.00% of 378.88 seconds
|
|
||||||
|
|
||||||
index % time self children called name
|
|
||||||
[1] 91.9 348.03 0.00 read [1]
|
|
||||||
-----------------------------------------------
|
|
||||||
[2] 3.1 11.64 0.00 open [2]
|
|
||||||
-----------------------------------------------
|
|
||||||
[3] 0.7 2.55 0.00 close [3]
|
|
||||||
-----------------------------------------------
|
|
||||||
[5] 0.2 0.62 0.00 memset [5]
|
|
||||||
-----------------------------------------------
|
|
||||||
[6] 0.2 0.59 0.00 __ipc [6]
|
|
||||||
-----------------------------------------------
|
|
||||||
[35] 0.0 0.12 0.00 vsscanf (iovsscanf.c:31) [35]
|
|
||||||
-----------------------------------------------
|
|
||||||
[96] 0.0 0.05 0.00 sscanf (sscanf.c:28) [96]
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
You see, it spends a lot of time in read() which is only used to read the
|
|
||||||
data from the files in /proc. Well, basically one can say that these
|
|
||||||
timings are not so bad, normally a process periodically fetches those
|
|
||||||
information say 10 times a seconds which makes 36000 invocations per
|
|
||||||
hour.
|
|
||||||
|
|
||||||
This will make a total of about 250 seconds per hour or on even say:
|
|
||||||
|
|
||||||
``a program fetching those information at a frequency of 10 will take
|
|
||||||
about 7 % of each hour just for reading files from /proc''.
|
|
||||||
|
|
||||||
Now look at timings of __ipc, they're about 350 times better 'cause this
|
|
||||||
is done using system calls.
|
|
||||||
|
|
||||||
So far so good, now look at how this is done on the DEC OSF/1 port of the
|
|
||||||
library (the following code is part of libgtop - GPL/LGPL):
|
|
||||||
|
|
||||||
CPU usage:
|
|
||||||
{
|
|
||||||
struct tbl_sysinfo sysinfo;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = table (TBL_SYSINFO, 0, (char *) &sysinfo, 1,
|
|
||||||
sizeof (struct tbl_sysinfo));
|
|
||||||
|
|
||||||
buf->user = sysinfo.si_user;
|
|
||||||
buf->nice = sysinfo.si_nice;
|
|
||||||
buf->sys = sysinfo.si_sys;
|
|
||||||
buf->idle = sysinfo.si_idle;
|
|
||||||
}
|
|
||||||
|
|
||||||
Well, the table() command of DEC OSF/1 has may disadvantages, too - such
|
|
||||||
as requiring to be root to fetch any information about processes (well, for
|
|
||||||
each process that is not the current one).
|
|
||||||
|
|
||||||
But this works using system calls rather that reading and parsing files
|
|
||||||
and should be about as fast as getting the IPC information on Linux.
|
|
||||||
|
|
||||||
Under Linux, the current trend seems to be to move anything into the /proc
|
|
||||||
filesystem, but if you look at the timings, wouldn't it be better to also
|
|
||||||
implement a system call interface ?
|
|
||||||
|
|
||||||
Don't understand me wrong:
|
|
||||||
=========================
|
|
||||||
|
|
||||||
I *do not want* to *replace* the /proc filesystem - it's an excellent
|
|
||||||
idea to be able to fetch all information on the command line without
|
|
||||||
any program just a simple 'cat' - I want to *add* a *new* system call
|
|
||||||
to allow programmers to fetch those information faster that reading
|
|
||||||
from /proc.
|
|
||||||
|
|
||||||
To come to the point:
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Is there any public interest in having a new system call under Linux
|
|
||||||
which can be used to fetch all information that are currently in the
|
|
||||||
/proc filesystem.
|
|
||||||
|
|
||||||
Basically, this system would be defined like this:
|
|
||||||
|
|
||||||
asmlinkage int
|
|
||||||
sys_table (int command, struct sysinfo_table *buf)
|
|
||||||
|
|
||||||
and be invoked like this:
|
|
||||||
|
|
||||||
#include <sys/table.h>
|
|
||||||
|
|
||||||
{
|
|
||||||
struct sysinfo_cpu cpu;
|
|
||||||
struct sysinfo_mem mem;
|
|
||||||
|
|
||||||
ret = table (TABLE_CPU, &cpu);
|
|
||||||
if (ret == -1) return; /* or invoke any error handler */
|
|
||||||
|
|
||||||
ret = table (TABLE_MEM, &mem);
|
|
||||||
if (ret == -1) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
What do you think, folks. Should we have such a system call under Linux ?
|
|
||||||
I can do the implementation of this system call, but I want to have some
|
|
||||||
feedback first.
|
|
||||||
|
|
||||||
Martin
|
|
||||||
|
|
||||||
--
|
|
||||||
-----------------------------------------------------------------
|
|
||||||
Martin Baulig - Angewandte Mathematik - Universitaet Trier
|
|
||||||
|
|
||||||
baulig@castor.uni-trier.de, http://www.home-of-linux.com/
|
|
||||||
Key: 1024-bit key with ID C8178435 created 1997/01/24
|
|
||||||
ID: 67 C1 84 A0 47 F5 11 C5 5F 68 4C 84 99 05 C3 92
|
|
||||||
Finger me for public key or fetch finger.txt from the url above
|
|
||||||
------------------------------------------------------------------
|
|
@@ -1,12 +0,0 @@
|
|||||||
<!doctype style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
|
|
||||||
<!ENTITY dbtohtml.dsl SYSTEM "dbtohtml.dsl" CDATA DSSSL >
|
|
||||||
]>
|
|
||||||
|
|
||||||
<style-specification id="tabledbotohtml" use="dbtohtml">
|
|
||||||
|
|
||||||
(define %output-basename% "table")
|
|
||||||
(define %output-directory% "table")
|
|
||||||
|
|
||||||
</style-specification>
|
|
||||||
|
|
||||||
<external-specification id="dbtohtml" document="dbtohtml.dsl">
|
|
193
doc/table.sgml
193
doc/table.sgml
@@ -1,193 +0,0 @@
|
|||||||
<!-- $Id$ -->
|
|
||||||
|
|
||||||
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
|
|
||||||
<!entity libgtopConf.sh SYSTEM "../libgtopConf.sh" >
|
|
||||||
<!entity home-of-linux "http://www.home-of-linux.org/">
|
|
||||||
<!entity table-announce-first "&home-of-linux;kernel/table/ANNOUNCE.FIRST">
|
|
||||||
<!entity table20-tgz "&home-of-linux;kernel/table/table20.tgz">
|
|
||||||
<!entity table21-tgz "&home-of-linux;kernel/table/table21.tgz">
|
|
||||||
<!entity news-c-o-l-d-s "comp.os.linux.development.system">
|
|
||||||
<!entity libgtop "<productname>libgtop</productname>">
|
|
||||||
<!entity table "<function>table ()</function>">
|
|
||||||
]>
|
|
||||||
<book>
|
|
||||||
<bookinfo>
|
|
||||||
<title>The &table; system call under Linux</title>
|
|
||||||
<authorgroup>
|
|
||||||
<author>
|
|
||||||
<firstname>Martin</firstname>
|
|
||||||
<surname>Baulig</surname>
|
|
||||||
<affiliation>
|
|
||||||
<address>
|
|
||||||
<email>martin@home-of-linux.org</email>
|
|
||||||
</address>
|
|
||||||
</affiliation>
|
|
||||||
</author>
|
|
||||||
</authorgroup>
|
|
||||||
<copyright>
|
|
||||||
<year>1998</year>
|
|
||||||
<holder>Martin Baulig</holder>
|
|
||||||
</copyright>
|
|
||||||
|
|
||||||
<legalnotice>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
This documentation is free software; you can redistribute
|
|
||||||
it and/or modify it under the terms of the GNU General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
This library is distributed in the hope that it will be
|
|
||||||
useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
||||||
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. See the GNU General Public License for more
|
|
||||||
details.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You should have received a copy of the GNU General Public
|
|
||||||
License along with this program; if not, write to the Free
|
|
||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
||||||
MA 02111-1307 USA
|
|
||||||
|
|
||||||
<para>
|
|
||||||
For more details see the file COPYING in the source
|
|
||||||
distribution of LibGTop.</para>
|
|
||||||
|
|
||||||
</legalnotice>
|
|
||||||
|
|
||||||
<abstract>
|
|
||||||
<para>
|
|
||||||
<literal>$Id$</literal>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Under <productname>Linux</productname>, reading from
|
|
||||||
<filename>/proc</filename> is somehow slow because the data
|
|
||||||
needs to be converted into a stringified representation from
|
|
||||||
the kernel and to be parsed from the application program to
|
|
||||||
get the original data back.
|
|
||||||
|
|
||||||
While doing the <productname>DEC OSF/1</productname> port of
|
|
||||||
&libgtop; I got the idea to add something similar to the &table;
|
|
||||||
function there to the Linux kernel.
|
|
||||||
|
|
||||||
This is what this document is about.
|
|
||||||
</abstract>
|
|
||||||
|
|
||||||
</bookinfo>
|
|
||||||
|
|
||||||
<toc></toc>
|
|
||||||
|
|
||||||
<chapter id="why-not-sysctl">
|
|
||||||
<title>Why not <function>sysctl</function>?</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Some weeks ago, I posted the initial proposal of the project to
|
|
||||||
<ulink url="news:&news-c-o-l-d-s;">&news-c-o-l-d-s;</ulink> with
|
|
||||||
Message-ID <literal><of7zpfprs08.fsf@Taurus.uni-trier.de></literal>.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You can also read this article at my site:
|
|
||||||
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>
|
|
||||||
<ulink url="&table-announce-first;">&table-announce-first;</ulink>
|
|
||||||
</itemizedlist>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Some people told me to include all the stuff into
|
|
||||||
<function>sysctl</function> instead of inventing a new system call.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Basically this is a good idea, but the main problem with
|
|
||||||
<function>sysctl</function> is that this should be applied to standard
|
|
||||||
kernels and not just as a short patch. Well, AFAIK something similar
|
|
||||||
is on the "wish list" for 2.2er kernels - but of cause it'll need some
|
|
||||||
time until we have a real replacement of the <filename>/proc</filename>
|
|
||||||
filesystem in <function>sysctl</function>.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If someone thinks that this absolutely should be included in
|
|
||||||
<function>sysctl</function>: think about some kind of interface,
|
|
||||||
discuss it with the kernel developers, ...
|
|
||||||
|
|
||||||
<chapter id="about-table">
|
|
||||||
<title>About the &table; function</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Using the &table; function will not affect any existing kernel
|
|
||||||
structures and can be done independent from kernel development.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
So it can easily be used in &libgtop; until we have something
|
|
||||||
simliar in standard kernels.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
If you want to use the &table; function in your own programs, be
|
|
||||||
aware that it is just intended to be some kind of quick solution
|
|
||||||
for &libgtop; until there's something better in standard kernels.
|
|
||||||
|
|
||||||
<chapter id="how-to-use">
|
|
||||||
<title>How to use the &table; function in &libgtop;</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The source code of the &table; function is distributed together with
|
|
||||||
&libgtop;. It can be found in the <filename>kernel/table20</filename>
|
|
||||||
directory for 2.0.xx kernels and in the <filename>kernel/table21</filename>
|
|
||||||
directory for 2.1.xx kernels.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
You can also download it from my site:
|
|
||||||
|
|
||||||
<itemizedlist>
|
|
||||||
<listitem><para>
|
|
||||||
<ulink url="&table20-tgz;">&table20-tgz</ulink>
|
|
||||||
(for kernel 2.0.xx)
|
|
||||||
<listitem><para>
|
|
||||||
<ulink url="&table21-tgz;">&table21-tgz</ulink>
|
|
||||||
(for kernel 2.1.xx)
|
|
||||||
</itemizedlist>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Copy the contents of the appropriate directory to
|
|
||||||
<filename>/usr/src/linux/table</filename>, apply the
|
|
||||||
patch to the kernel and re-configure &libgtop;.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
After that, you can unmount <filename>/proc</filename> and
|
|
||||||
&libgtop; will still work !
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>
|
|
||||||
Maybe one could consider this as a bug, but currently there
|
|
||||||
isn't a configuration option to disable the &table; function
|
|
||||||
once you applied the patch ...
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>
|
|
||||||
Currently I'm working on the 2.1.x version to implement some
|
|
||||||
features newer kernels have - so the 2.0.x version may not
|
|
||||||
have all features the 2.1.x one has.
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<note>
|
|
||||||
<para>
|
|
||||||
The 2.1.x version of the &table; function is implemented
|
|
||||||
as a kernel module. You have to do a
|
|
||||||
<command>insmod table/module.o</command> manually to use it.
|
|
||||||
|
|
||||||
<para>
|
|
||||||
This has the advantage that you don't need to reboot if you
|
|
||||||
want to play around with the code a little bit.
|
|
||||||
</note>
|
|
||||||
|
|
||||||
</book>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Local Variables:
|
|
||||||
mode: sgml
|
|
||||||
sgml-indent-data: t
|
|
||||||
End:
|
|
||||||
-->
|
|
@@ -1,15 +0,0 @@
|
|||||||
1998-07-22 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* mountlist.c: New file.
|
|
||||||
|
|
||||||
1998-06-12 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* test.scm: New file.
|
|
||||||
|
|
||||||
1998-06-07 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* Makefile.am (CFLAGS): Disable optimize.
|
|
||||||
|
|
||||||
* first.c (PROFILE_COUNT): Number of times each function
|
|
||||||
should be called. Defaults to 1; to profile the code, you
|
|
||||||
can increase this when compiling.
|
|
@@ -2,58 +2,70 @@
|
|||||||
|
|
||||||
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
CFLAGS = -Wall -W @CFLAGS@ -O0
|
INCLUDES = -I$(top_builddir) -I$(top_srcdir) @machine_incs@ \
|
||||||
|
-I$(top_srcdir)/include -I$(top_srcdir)/intl @GUILE_INCS@ \
|
||||||
|
-DGTOPLOCALEDIR=\"$(datadir)/locale\" -D_GNU_SOURCE
|
||||||
|
|
||||||
|
CFLAGS = -Wall -W @CFLAGS@
|
||||||
|
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
|
|
||||||
bin_PROGRAMS = first first_static second second_static \
|
bin_PROGRAMS = first first_static first_linux \
|
||||||
mountlist mountlist_static \
|
second second_static second_linux \
|
||||||
@guile_examples@
|
@guile_examples@
|
||||||
|
|
||||||
EXTRA_PROGRAMS = third third_static
|
EXTRA_PROGRAMS = third third_static third_linux
|
||||||
|
|
||||||
first_SOURCES = first.c
|
first_SOURCES = first.c
|
||||||
first_LDADD = $(top_builddir)/lib/libgtop.la \
|
first_LDADD = $(top_builddir)/sysdeps/common/libgtop_common.la \
|
||||||
$(top_builddir)/sysdeps/common/libgtop_common.la \
|
$(top_builddir)/lib/libgtop.la \
|
||||||
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
@INTLLIBS@ @LIBSUPPORT@
|
||||||
@INTLLIBS@ @LIBSUPPORT@ @libs_xauth@
|
|
||||||
|
|
||||||
first_static_SOURCES = $(first_SOURCES)
|
first_static_SOURCES = $(first_SOURCES)
|
||||||
first_static_LDADD = $(first_LDADD)
|
first_static_LDADD = $(first_LDADD)
|
||||||
first_static_LDFLAGS = -static
|
first_static_LDFLAGS = -static
|
||||||
|
|
||||||
second_SOURCES = second.c
|
first_linux_SOURCES = $(first_SOURCES)
|
||||||
second_LDADD = $(top_builddir)/lib/libgtop.la \
|
first_linux_LDADD = $(top_builddir)/sysdeps/common/libgtop_common.la \
|
||||||
$(top_builddir)/sysdeps/common/libgtop_common.la \
|
|
||||||
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
||||||
@INTLLIBS@ @LIBSUPPORT@ @libs_xauth@
|
@INTLLIBS@ @LIBSUPPORT@
|
||||||
|
first_linux_LDFLAGS = -static
|
||||||
|
|
||||||
|
second_SOURCES = second.c
|
||||||
|
second_LDADD = $(top_builddir)/sysdeps/common/libgtop_common.la \
|
||||||
|
$(top_builddir)/lib/libgtop.la \
|
||||||
|
@INTLLIBS@ @LIBSUPPORT@
|
||||||
|
|
||||||
second_static_SOURCES = $(second_SOURCES)
|
second_static_SOURCES = $(second_SOURCES)
|
||||||
second_static_LDADD = $(second_LDADD)
|
second_static_LDADD = $(second_LDADD)
|
||||||
second_static_LDFLAGS = -static
|
second_static_LDFLAGS = -static
|
||||||
|
|
||||||
|
second_linux_SOURCES = $(second_SOURCES)
|
||||||
|
second_linux_LDADD = $(top_builddir)/sysdeps/common/libgtop_common.la \
|
||||||
|
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
||||||
|
@INTLLIBS@ @LIBSUPPORT@
|
||||||
|
second_linux_LDFLAGS = -static
|
||||||
|
|
||||||
|
if GLIBTOP_NAMES
|
||||||
third_guile_names_LIBS = $(top_builddir)/sysdeps/guile/names/libgtop_guile_names.la
|
third_guile_names_LIBS = $(top_builddir)/sysdeps/guile/names/libgtop_guile_names.la
|
||||||
third_names_LIBS = $(top_builddir)/sysdeps/names/libgtop_names.la
|
third_names_LIBS = $(top_builddir)/sysdeps/names/libgtop_names.la
|
||||||
|
endif
|
||||||
|
|
||||||
third_SOURCES = third.c
|
third_SOURCES = third.c
|
||||||
third_LDADD = $(top_builddir)/sysdeps/guile/libgtop_guile.la \
|
third_LDADD = $(top_builddir)/sysdeps/guile/libgtop_guile.la \
|
||||||
$(third_guile_names_LIBS) $(third_names_LIBS) \
|
$(third_guile_names_LIBS) $(third_names_LIBS) \
|
||||||
$(top_builddir)/lib/libgtop.la \
|
|
||||||
$(top_builddir)/sysdeps/common/libgtop_common.la \
|
$(top_builddir)/sysdeps/common/libgtop_common.la \
|
||||||
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
$(top_builddir)/lib/libgtop.la \
|
||||||
@GUILE_LIBS@ @INTLLIBS@ @LIBSUPPORT@ @libs_xauth@
|
@GUILE_LIBS@ @INTLLIBS@ @LIBSUPPORT@
|
||||||
|
|
||||||
third_static_SOURCES = $(third_SOURCES)
|
third_static_SOURCES = $(third_SOURCES)
|
||||||
third_static_LDADD = $(third_LDADD)
|
third_static_LDADD = $(third_LDADD)
|
||||||
third_static_LDFLAGS = -static
|
third_static_LDFLAGS = -static
|
||||||
|
|
||||||
mountlist_SOURCES = mountlist.c
|
third_linux_SOURCES = $(third_SOURCES)
|
||||||
mountlist_LDADD = $(top_builddir)/lib/libgtop.la \
|
third_linux_LDADD = $(top_builddir)/sysdeps/guile/libgtop_guile.la \
|
||||||
|
$(third_guile_names_LIBS) $(third_names_LIBS) \
|
||||||
$(top_builddir)/sysdeps/common/libgtop_common.la \
|
$(top_builddir)/sysdeps/common/libgtop_common.la \
|
||||||
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
|
||||||
@INTLLIBS@ @LIBSUPPORT@ @libs_xauth@
|
@GUILE_LIBS@ @INTLLIBS@ @LIBSUPPORT@
|
||||||
|
third_linux_LDFLAGS = -static
|
||||||
mountlist_static_SOURCES= $(mountlist_SOURCES)
|
|
||||||
mountlist_static_LDADD = $(mountlist_LDADD)
|
|
||||||
mountlist_static_LDFLAGS= -static
|
|
||||||
|
|
||||||
|
467
examples/first.c
467
examples/first.c
@@ -26,139 +26,105 @@
|
|||||||
#include <glibtop/close.h>
|
#include <glibtop/close.h>
|
||||||
#include <glibtop/xmalloc.h>
|
#include <glibtop/xmalloc.h>
|
||||||
|
|
||||||
#include <glibtop/parameter.h>
|
|
||||||
|
|
||||||
#include <glibtop/union.h>
|
#include <glibtop/union.h>
|
||||||
#include <glibtop/sysdeps.h>
|
#include <glibtop/sysdeps.h>
|
||||||
|
|
||||||
#ifndef PROFILE_COUNT
|
|
||||||
#define PROFILE_COUNT 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv [])
|
main (int argc, char *argv [])
|
||||||
{
|
{
|
||||||
glibtop_union data;
|
glibtop_union data;
|
||||||
glibtop_sysdeps sysdeps;
|
glibtop_sysdeps sysdeps;
|
||||||
unsigned c, method, count, port, i, *ptr;
|
unsigned i, *ptr;
|
||||||
char buffer [BUFSIZ];
|
|
||||||
pid_t pid, ppid;
|
pid_t pid, ppid;
|
||||||
|
|
||||||
count = PROFILE_COUNT;
|
|
||||||
|
|
||||||
setlocale (LC_ALL, "");
|
setlocale (LC_ALL, "");
|
||||||
bindtextdomain (PACKAGE, GTOPLOCALEDIR);
|
bindtextdomain (PACKAGE, GTOPLOCALEDIR);
|
||||||
textdomain (PACKAGE);
|
textdomain (PACKAGE);
|
||||||
|
|
||||||
glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
|
glibtop_init__r (&glibtop_global_server);
|
||||||
|
|
||||||
glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
|
glibtop_get_cpu (&data.cpu);
|
||||||
|
|
||||||
printf ("Method = %d\n", method);
|
fprintf (stderr, "CPU (0x%08lx): %lu, %lu, %lu, %lu, %lu, %lu\n",
|
||||||
|
data.cpu.flags, data.cpu.total, data.cpu.user, data.cpu.nice,
|
||||||
|
data.cpu.sys, data.cpu.idle, data.cpu.frequency);
|
||||||
|
|
||||||
count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
|
glibtop_get_mem (&data.mem);
|
||||||
buffer [count] = 0;
|
|
||||||
|
|
||||||
printf ("Command = '%s'\n", buffer);
|
fprintf (stderr, "Memory (0x%08lx): %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
|
||||||
|
data.mem.flags, data.mem.total, data.mem.used, data.mem.free,
|
||||||
|
data.mem.shared, data.mem.buffer, data.mem.cached,
|
||||||
|
data.mem.user, data.mem.locked);
|
||||||
|
|
||||||
count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
|
glibtop_get_swap (&data.swap);
|
||||||
buffer [count] = 0;
|
|
||||||
|
|
||||||
glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
|
fprintf (stderr, "Swap (0x%08lx): %lu, %lu, %lu\n", data.swap.flags,
|
||||||
|
data.swap.total, data.swap.used, data.swap.free);
|
||||||
|
|
||||||
printf ("Host = '%s' - %u\n\n", buffer, port);
|
glibtop_get_uptime (&data.uptime);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
fprintf (stderr, "Uptime (0x%08lx): %f, %f\n", data.uptime.flags,
|
||||||
glibtop_get_cpu (&data.cpu);
|
data.uptime.uptime, data.uptime.idletime);
|
||||||
|
|
||||||
printf ("CPU (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
glibtop_get_loadavg (&data.loadavg);
|
||||||
data.cpu.flags, data.cpu.total, data.cpu.user, data.cpu.nice,
|
|
||||||
data.cpu.sys, data.cpu.idle, data.cpu.frequency);
|
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
fprintf (stderr, "Loadavg (0x%08lx): %f, %f, %f\n", data.loadavg.flags,
|
||||||
glibtop_get_mem (&data.mem);
|
data.loadavg.loadavg [0], data.loadavg.loadavg [1],
|
||||||
|
data.loadavg.loadavg [2]);
|
||||||
|
|
||||||
printf ("Memory (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
glibtop_get_shm_limits (&data.shm_limits);
|
||||||
data.mem.flags, data.mem.total, data.mem.used, data.mem.free,
|
|
||||||
data.mem.shared, data.mem.buffer, data.mem.cached,
|
|
||||||
data.mem.user, data.mem.locked);
|
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
|
||||||
glibtop_get_swap (&data.swap);
|
|
||||||
|
|
||||||
printf ("Swap (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
|
||||||
data.swap.flags, data.swap.total, data.swap.used,
|
|
||||||
data.swap.free, data.swap.pagein, data.swap.pageout);
|
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
|
||||||
glibtop_get_uptime (&data.uptime);
|
|
||||||
|
|
||||||
printf ("Uptime (0x%08Lx): %f, %f\n", data.uptime.flags,
|
|
||||||
data.uptime.uptime, data.uptime.idletime);
|
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
|
||||||
glibtop_get_loadavg (&data.loadavg);
|
|
||||||
|
|
||||||
printf ("Loadavg (0x%08Lx): %f, %f, %f\n", data.loadavg.flags,
|
|
||||||
data.loadavg.loadavg [0], data.loadavg.loadavg [1],
|
|
||||||
data.loadavg.loadavg [2]);
|
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
|
||||||
glibtop_get_shm_limits (&data.shm_limits);
|
|
||||||
|
|
||||||
printf ("Shm Limits (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
fprintf (stderr, "Shm Limits (0x%08lx): %ld, %ld, %ld, %ld, %ld\n",
|
||||||
data.shm_limits.flags, data.shm_limits.shmmax,
|
data.shm_limits.flags, data.shm_limits.shmmax,
|
||||||
data.shm_limits.shmmin, data.shm_limits.shmmni,
|
data.shm_limits.shmmin, data.shm_limits.shmmni,
|
||||||
data.shm_limits.shmseg, data.shm_limits.shmall);
|
data.shm_limits.shmseg, data.shm_limits.shmall);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_msg_limits (&data.msg_limits);
|
||||||
glibtop_get_msg_limits (&data.msg_limits);
|
|
||||||
|
|
||||||
printf ("Msg Limits (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
fprintf (stderr, "Msg Limits (0x%08lx): %ld, %ld, %ld, %ld, %ld, %ld, %ld\n",
|
||||||
data.msg_limits.flags, data.msg_limits.msgpool,
|
data.msg_limits.flags, data.msg_limits.msgpool,
|
||||||
data.msg_limits.msgmap, data.msg_limits.msgmax,
|
data.msg_limits.msgmap, data.msg_limits.msgmax,
|
||||||
data.msg_limits.msgmnb, data.msg_limits.msgmni,
|
data.msg_limits.msgmnb, data.msg_limits.msgmni,
|
||||||
data.msg_limits.msgssz, data.msg_limits.msgtql);
|
data.msg_limits.msgssz, data.msg_limits.msgtql);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_sem_limits (&data.sem_limits);
|
||||||
glibtop_get_sem_limits (&data.sem_limits);
|
|
||||||
|
|
||||||
printf ("Sem Limits (0x%08Lx): "
|
fprintf (stderr, "Sem Limits (0x%08lx): "
|
||||||
"%Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
"%ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld\n",
|
||||||
data.sem_limits.flags, data.sem_limits.semmap,
|
data.sem_limits.flags, data.sem_limits.semmap,
|
||||||
data.sem_limits.semmni, data.sem_limits.semmns,
|
data.sem_limits.semmni, data.sem_limits.semmns,
|
||||||
data.sem_limits.semmnu, data.sem_limits.semmsl,
|
data.sem_limits.semmnu, data.sem_limits.semmsl,
|
||||||
data.sem_limits.semopm, data.sem_limits.semume,
|
data.sem_limits.semopm, data.sem_limits.semume,
|
||||||
data.sem_limits.semusz, data.sem_limits.semvmx,
|
data.sem_limits.semusz, data.sem_limits.semvmx,
|
||||||
data.sem_limits.semaem);
|
data.sem_limits.semaem);
|
||||||
|
|
||||||
printf ("\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
glibtop_get_sysdeps (&sysdeps);
|
glibtop_get_sysdeps (&sysdeps);
|
||||||
|
|
||||||
printf ("Sysdeps (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu, "
|
fprintf (stderr, "Sysdeps (0x%08lx): %lu, %lu, %lu, %lu, %lu, "
|
||||||
"%Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
"%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
|
||||||
sysdeps.flags, sysdeps.cpu, sysdeps.mem, sysdeps.swap,
|
sysdeps.flags, sysdeps.cpu, sysdeps.mem, sysdeps.swap,
|
||||||
sysdeps.uptime, sysdeps.loadavg, sysdeps.shm_limits,
|
sysdeps.uptime, sysdeps.loadavg, sysdeps.shm_limits,
|
||||||
sysdeps.msg_limits, sysdeps.sem_limits,
|
sysdeps.msg_limits, sysdeps.sem_limits,
|
||||||
sysdeps.proclist, sysdeps.proc_state,
|
sysdeps.proclist, sysdeps.proc_state,
|
||||||
sysdeps.proc_uid, sysdeps.proc_mem,
|
sysdeps.proc_uid, sysdeps.proc_mem,
|
||||||
sysdeps.proc_time, sysdeps.proc_signal,
|
sysdeps.proc_time, sysdeps.proc_signal,
|
||||||
sysdeps.proc_kernel, sysdeps.proc_segment);
|
sysdeps.proc_kernel, sysdeps.proc_segment);
|
||||||
|
|
||||||
printf ("\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
ptr = glibtop_get_proclist (&data.proclist);
|
ptr = glibtop_get_proclist (&data.proclist);
|
||||||
|
|
||||||
printf ("Proclist (0x%08Lx): %Lu, %Lu, %Lu\n",
|
fprintf (stderr, "Proclist (0x%08lx): %ld, %ld, %ld\n",
|
||||||
data.proclist.flags, data.proclist.number,
|
data.proclist.flags, data.proclist.number,
|
||||||
data.proclist.size, data.proclist.total);
|
data.proclist.size, data.proclist.total);
|
||||||
|
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
printf ("\nProcess: ");
|
fprintf (stderr, "\nProcess: ");
|
||||||
for (i = 0; i < data.proclist.number; i++)
|
for (i = 0; i < data.proclist.number; i++)
|
||||||
printf ("%s%u", i ? ", " : "", ptr [i]);
|
fprintf (stderr, "%s%u", i ? ", " : "", ptr [i]);
|
||||||
printf ("\n");
|
fprintf (stderr, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
glibtop_free (ptr);
|
glibtop_free (ptr);
|
||||||
@@ -166,220 +132,197 @@ main (int argc, char *argv [])
|
|||||||
pid = getpid ();
|
pid = getpid ();
|
||||||
ppid = getppid ();
|
ppid = getppid ();
|
||||||
|
|
||||||
printf ("\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_state (&data.proc_state, pid);
|
||||||
glibtop_get_proc_state (&data.proc_state, pid);
|
|
||||||
|
|
||||||
printf ("Proc_State PID %5u (0x%08Lx): '%s', %c, %u, %u\n",
|
fprintf (stderr, "Proc_State PID %5u (0x%08lx): '%s', %c, %u, %u\n",
|
||||||
pid, data.proc_state.flags, data.proc_state.cmd,
|
pid, data.proc_state.flags, data.proc_state.cmd,
|
||||||
data.proc_state.state, data.proc_state.uid,
|
data.proc_state.state, data.proc_state.uid,
|
||||||
data.proc_state.gid);
|
data.proc_state.gid);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_uid (&data.proc_uid, pid);
|
||||||
glibtop_get_proc_uid (&data.proc_uid, pid);
|
|
||||||
|
|
||||||
printf ("Proc_Uid PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Uid PID %5u (0x%08lx): "
|
||||||
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
||||||
pid, data.proc_uid.flags, data.proc_uid.uid,
|
pid, data.proc_uid.flags, data.proc_uid.uid,
|
||||||
data.proc_uid.euid, data.proc_uid.gid,
|
data.proc_uid.euid, data.proc_uid.gid,
|
||||||
data.proc_uid.egid, data.proc_uid.pid,
|
data.proc_uid.egid, data.proc_uid.pid,
|
||||||
data.proc_uid.ppid, data.proc_uid.pgrp,
|
data.proc_uid.ppid, data.proc_uid.pgrp,
|
||||||
data.proc_uid.session, data.proc_uid.tty,
|
data.proc_uid.session, data.proc_uid.tty,
|
||||||
data.proc_uid.tpgid, data.proc_uid.priority,
|
data.proc_uid.tpgid, data.proc_uid.priority,
|
||||||
data.proc_uid.nice);
|
data.proc_uid.nice);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_mem (&data.proc_mem, pid);
|
||||||
glibtop_get_proc_mem (&data.proc_mem, pid);
|
|
||||||
|
|
||||||
printf ("Proc_Mem PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Mem PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu\n", pid, data.proc_mem.flags,
|
"%ld %ld %ld %ld %ld %ld\n", pid, data.proc_mem.flags,
|
||||||
data.proc_mem.size, data.proc_mem.vsize,
|
data.proc_mem.size, data.proc_mem.vsize,
|
||||||
data.proc_mem.resident, data.proc_mem.share,
|
data.proc_mem.resident, data.proc_mem.share,
|
||||||
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_time (&data.proc_time, pid);
|
||||||
glibtop_get_proc_time (&data.proc_time, pid);
|
|
||||||
|
|
||||||
printf ("Proc_Time PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Time PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", pid, data.proc_time.flags,
|
"%ld %ld %ld %ld %ld %ld %ld\n", pid, data.proc_time.flags,
|
||||||
data.proc_time.start_time, data.proc_time.utime,
|
data.proc_time.start_time, data.proc_time.utime,
|
||||||
data.proc_time.stime, data.proc_time.cutime,
|
data.proc_time.stime, data.proc_time.cutime,
|
||||||
data.proc_time.cstime, data.proc_time.timeout,
|
data.proc_time.cstime, data.proc_time.timeout,
|
||||||
data.proc_time.it_real_value);
|
data.proc_time.it_real_value);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_signal (&data.proc_signal, pid);
|
||||||
glibtop_get_proc_signal (&data.proc_signal, pid);
|
|
||||||
|
|
||||||
printf ("Proc_Signal PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Signal PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu\n", pid, data.proc_signal.flags,
|
"%d %d %d %d\n", pid, data.proc_signal.flags,
|
||||||
data.proc_signal.signal, data.proc_signal.blocked,
|
data.proc_signal.signal, data.proc_signal.blocked,
|
||||||
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_kernel (&data.proc_kernel, pid);
|
||||||
glibtop_get_proc_kernel (&data.proc_kernel, pid);
|
|
||||||
|
|
||||||
printf ("Proc_Kernel PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Kernel PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", pid,
|
"%lu %lu %lu %lu %lu %lu %lu %lu\n", pid,
|
||||||
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
||||||
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
||||||
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
||||||
data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip,
|
data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip,
|
||||||
data.proc_kernel.wchan);
|
data.proc_kernel.wchan);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_segment (&data.proc_segment, pid);
|
||||||
glibtop_get_proc_segment (&data.proc_segment, pid);
|
|
||||||
|
|
||||||
printf ("Proc_Segment PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Segment PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", pid, data.proc_segment.flags,
|
"%ld %ld %ld %ld %lu %lu %lu\n", pid, data.proc_segment.flags,
|
||||||
data.proc_segment.trs, data.proc_segment.lrs,
|
data.proc_segment.trs, data.proc_segment.lrs,
|
||||||
data.proc_segment.drs, data.proc_segment.dt,
|
data.proc_segment.drs, data.proc_segment.dt,
|
||||||
data.proc_segment.start_code, data.proc_segment.end_code,
|
data.proc_segment.start_code, data.proc_segment.end_code,
|
||||||
data.proc_segment.start_stack);
|
data.proc_segment.start_stack);
|
||||||
|
|
||||||
printf ("\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_state (&data.proc_state, ppid);
|
||||||
glibtop_get_proc_state (&data.proc_state, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_State PPID %5u (0x%08Lx): '%s', %c, %u, %u\n",
|
fprintf (stderr, "Proc_State PPID %5u (0x%08lx): '%s', %c, %u, %u\n",
|
||||||
ppid, data.proc_state.flags, data.proc_state.cmd,
|
ppid, data.proc_state.flags, data.proc_state.cmd,
|
||||||
data.proc_state.state, data.proc_state.uid,
|
data.proc_state.state, data.proc_state.uid,
|
||||||
data.proc_state.gid);
|
data.proc_state.gid);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_uid (&data.proc_uid, ppid);
|
||||||
glibtop_get_proc_uid (&data.proc_uid, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_Uid PPID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Uid PPID %5u (0x%08lx): "
|
||||||
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
||||||
ppid, data.proc_uid.flags, data.proc_uid.uid,
|
ppid, data.proc_uid.flags, data.proc_uid.uid,
|
||||||
data.proc_uid.euid, data.proc_uid.gid,
|
data.proc_uid.euid, data.proc_uid.gid,
|
||||||
data.proc_uid.egid, data.proc_uid.pid,
|
data.proc_uid.egid, data.proc_uid.pid,
|
||||||
data.proc_uid.ppid, data.proc_uid.pgrp,
|
data.proc_uid.ppid, data.proc_uid.pgrp,
|
||||||
data.proc_uid.session, data.proc_uid.tty,
|
data.proc_uid.session, data.proc_uid.tty,
|
||||||
data.proc_uid.tpgid, data.proc_uid.priority,
|
data.proc_uid.tpgid, data.proc_uid.priority,
|
||||||
data.proc_uid.nice);
|
data.proc_uid.nice);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_mem (&data.proc_mem, ppid);
|
||||||
glibtop_get_proc_mem (&data.proc_mem, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_Mem PPID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Mem PPID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu\n", ppid, data.proc_mem.flags,
|
"%ld %ld %ld %ld %ld %ld\n", ppid, data.proc_mem.flags,
|
||||||
data.proc_mem.size, data.proc_mem.vsize,
|
data.proc_mem.size, data.proc_mem.vsize,
|
||||||
data.proc_mem.resident, data.proc_mem.share,
|
data.proc_mem.resident, data.proc_mem.share,
|
||||||
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_time (&data.proc_time, ppid);
|
||||||
glibtop_get_proc_time (&data.proc_time, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_Time PPID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Time PPID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", ppid, data.proc_time.flags,
|
"%ld %ld %ld %ld %ld %ld %ld\n", ppid, data.proc_time.flags,
|
||||||
data.proc_time.start_time, data.proc_time.utime,
|
data.proc_time.start_time, data.proc_time.utime,
|
||||||
data.proc_time.stime, data.proc_time.cutime,
|
data.proc_time.stime, data.proc_time.cutime,
|
||||||
data.proc_time.cstime, data.proc_time.timeout,
|
data.proc_time.cstime, data.proc_time.timeout,
|
||||||
data.proc_time.it_real_value);
|
data.proc_time.it_real_value);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_signal (&data.proc_signal, ppid);
|
||||||
glibtop_get_proc_signal (&data.proc_signal, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_Signal PPID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Signal PPID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu\n", ppid, data.proc_signal.flags,
|
"%d %d %d %d\n", ppid, data.proc_signal.flags,
|
||||||
data.proc_signal.signal, data.proc_signal.blocked,
|
data.proc_signal.signal, data.proc_signal.blocked,
|
||||||
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_kernel (&data.proc_kernel, ppid);
|
||||||
glibtop_get_proc_kernel (&data.proc_kernel, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_Kernel PPID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Kernel PPID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", ppid,
|
"%lu %lu %lu %lu %lu %lu %lu %lu\n", ppid,
|
||||||
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
||||||
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
||||||
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
||||||
data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip,
|
data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip,
|
||||||
data.proc_kernel.wchan);
|
data.proc_kernel.wchan);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_segment (&data.proc_segment, ppid);
|
||||||
glibtop_get_proc_segment (&data.proc_segment, ppid);
|
|
||||||
|
|
||||||
printf ("Proc_Segment PPID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Segment PPID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", ppid, data.proc_segment.flags,
|
"%ld %ld %ld %ld %lu %lu %lu\n", ppid, data.proc_segment.flags,
|
||||||
data.proc_segment.trs, data.proc_segment.lrs,
|
data.proc_segment.trs, data.proc_segment.lrs,
|
||||||
data.proc_segment.drs, data.proc_segment.dt,
|
data.proc_segment.drs, data.proc_segment.dt,
|
||||||
data.proc_segment.start_code, data.proc_segment.end_code,
|
data.proc_segment.start_code, data.proc_segment.end_code,
|
||||||
data.proc_segment.start_stack);
|
data.proc_segment.start_stack);
|
||||||
|
|
||||||
printf ("\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_state (&data.proc_state, 1);
|
||||||
glibtop_get_proc_state (&data.proc_state, 1);
|
|
||||||
|
|
||||||
printf ("Proc_State INIT %5u (0x%08Lx): '%s', %c, %u, %u\n",
|
fprintf (stderr, "Proc_State INIT %5u (0x%08lx): '%s', %c, %u, %u\n",
|
||||||
1, data.proc_state.flags, data.proc_state.cmd,
|
1, data.proc_state.flags, data.proc_state.cmd,
|
||||||
data.proc_state.state, data.proc_state.uid,
|
data.proc_state.state, data.proc_state.uid,
|
||||||
data.proc_state.gid);
|
data.proc_state.gid);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_uid (&data.proc_uid, 1);
|
||||||
glibtop_get_proc_uid (&data.proc_uid, 1);
|
|
||||||
|
|
||||||
printf ("Proc_Uid INIT %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Uid INIT %5u (0x%08lx): "
|
||||||
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
||||||
1, data.proc_uid.flags, data.proc_uid.uid,
|
1, data.proc_uid.flags, data.proc_uid.uid,
|
||||||
data.proc_uid.euid, data.proc_uid.gid,
|
data.proc_uid.euid, data.proc_uid.gid,
|
||||||
data.proc_uid.egid, data.proc_uid.pid,
|
data.proc_uid.egid, data.proc_uid.pid,
|
||||||
data.proc_uid.ppid, data.proc_uid.pgrp,
|
data.proc_uid.ppid, data.proc_uid.pgrp,
|
||||||
data.proc_uid.session, data.proc_uid.tty,
|
data.proc_uid.session, data.proc_uid.tty,
|
||||||
data.proc_uid.tpgid, data.proc_uid.priority,
|
data.proc_uid.tpgid, data.proc_uid.priority,
|
||||||
data.proc_uid.nice);
|
data.proc_uid.nice);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_mem (&data.proc_mem, 1);
|
||||||
glibtop_get_proc_mem (&data.proc_mem, 1);
|
|
||||||
|
|
||||||
printf ("Proc_Mem INIT %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Mem INIT %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu\n", 1, data.proc_mem.flags,
|
"%ld %ld %ld %ld %ld %ld\n", 1, data.proc_mem.flags,
|
||||||
data.proc_mem.size, data.proc_mem.vsize,
|
data.proc_mem.size, data.proc_mem.vsize,
|
||||||
data.proc_mem.resident, data.proc_mem.share,
|
data.proc_mem.resident, data.proc_mem.share,
|
||||||
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_time (&data.proc_time, 1);
|
||||||
glibtop_get_proc_time (&data.proc_time, 1);
|
|
||||||
|
|
||||||
printf ("Proc_Time INIT %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Time INIT %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", 1, data.proc_time.flags,
|
"%ld %ld %ld %ld %ld %ld %ld\n", 1, data.proc_time.flags,
|
||||||
data.proc_time.start_time, data.proc_time.utime,
|
data.proc_time.start_time, data.proc_time.utime,
|
||||||
data.proc_time.stime, data.proc_time.cutime,
|
data.proc_time.stime, data.proc_time.cutime,
|
||||||
data.proc_time.cstime, data.proc_time.timeout,
|
data.proc_time.cstime, data.proc_time.timeout,
|
||||||
data.proc_time.it_real_value);
|
data.proc_time.it_real_value);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_signal (&data.proc_signal, 1);
|
||||||
glibtop_get_proc_signal (&data.proc_signal, 1);
|
|
||||||
|
|
||||||
printf ("Proc_Signal INIT %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Signal INIT %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu\n", 1, data.proc_signal.flags,
|
"%d %d %d %d\n", 1, data.proc_signal.flags,
|
||||||
data.proc_signal.signal, data.proc_signal.blocked,
|
data.proc_signal.signal, data.proc_signal.blocked,
|
||||||
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_kernel (&data.proc_kernel, 1);
|
||||||
glibtop_get_proc_kernel (&data.proc_kernel, 1);
|
|
||||||
|
|
||||||
printf ("Proc_Kernel INIT %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Kernel INIT %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", 1,
|
"%lu %lu %lu %lu %lu %lu %lu %lu\n", 1,
|
||||||
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
||||||
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
||||||
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
||||||
data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip,
|
data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip,
|
||||||
data.proc_kernel.wchan);
|
data.proc_kernel.wchan);
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++)
|
glibtop_get_proc_segment (&data.proc_segment, 1);
|
||||||
glibtop_get_proc_segment (&data.proc_segment, 1);
|
|
||||||
|
|
||||||
printf ("Proc_Segment INIT %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Segment INIT %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", 1, data.proc_segment.flags,
|
"%ld %ld %ld %ld %lu %lu %lu\n", 1, data.proc_segment.flags,
|
||||||
data.proc_segment.trs, data.proc_segment.lrs,
|
data.proc_segment.trs, data.proc_segment.lrs,
|
||||||
data.proc_segment.drs, data.proc_segment.dt,
|
data.proc_segment.drs, data.proc_segment.dt,
|
||||||
data.proc_segment.start_code, data.proc_segment.end_code,
|
data.proc_segment.start_code, data.proc_segment.end_code,
|
||||||
data.proc_segment.start_stack);
|
data.proc_segment.start_stack);
|
||||||
|
|
||||||
glibtop_close ();
|
|
||||||
|
|
||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
|
@@ -1,111 +0,0 @@
|
|||||||
/* $Id$ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
This file is part of the Gnome Top Library.
|
|
||||||
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
|
||||||
|
|
||||||
The Gnome Top Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The Gnome Top Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#include <locale.h>
|
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/open.h>
|
|
||||||
#include <glibtop/close.h>
|
|
||||||
#include <glibtop/xmalloc.h>
|
|
||||||
|
|
||||||
#include <glibtop/parameter.h>
|
|
||||||
|
|
||||||
#include <glibtop/mountlist.h>
|
|
||||||
#include <glibtop/fsusage.h>
|
|
||||||
|
|
||||||
#ifndef PROFILE_COUNT
|
|
||||||
#define PROFILE_COUNT 1000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char *argv [])
|
|
||||||
{
|
|
||||||
glibtop_fsusage fsusage;
|
|
||||||
glibtop_mountlist mount_list;
|
|
||||||
glibtop_mountentry *mount_entries;
|
|
||||||
unsigned c, index, method, count, port;
|
|
||||||
char buffer [BUFSIZ];
|
|
||||||
|
|
||||||
setlocale (LC_ALL, "");
|
|
||||||
bindtextdomain (PACKAGE, GTOPLOCALEDIR);
|
|
||||||
textdomain (PACKAGE);
|
|
||||||
|
|
||||||
glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
|
|
||||||
|
|
||||||
glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
|
|
||||||
|
|
||||||
printf ("Method = %d\n", method);
|
|
||||||
|
|
||||||
count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
|
|
||||||
buffer [count] = 0;
|
|
||||||
|
|
||||||
printf ("Command = '%s'\n", buffer);
|
|
||||||
|
|
||||||
count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
|
|
||||||
buffer [count] = 0;
|
|
||||||
|
|
||||||
glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
|
|
||||||
|
|
||||||
printf ("Host = '%s' - %u\n\n", buffer, port);
|
|
||||||
|
|
||||||
printf ("sbrk (0) = %p\n\n", sbrk (0));
|
|
||||||
|
|
||||||
for (c = 0; c < PROFILE_COUNT; c++) {
|
|
||||||
mount_entries = glibtop_get_mountlist (&mount_list, 1);
|
|
||||||
|
|
||||||
glibtop_free (mount_entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf ("sbrk (0) = %p\n\n", sbrk (0));
|
|
||||||
|
|
||||||
mount_entries = glibtop_get_mountlist (&mount_list, 1);
|
|
||||||
|
|
||||||
if (mount_entries == NULL)
|
|
||||||
_exit (1);
|
|
||||||
|
|
||||||
for (index = 0; index < mount_list.number; index++)
|
|
||||||
printf ("Mount_Entry: %-30s %-10s %-20s\n",
|
|
||||||
mount_entries [index].mountdir,
|
|
||||||
mount_entries [index].type,
|
|
||||||
mount_entries [index].devname);
|
|
||||||
|
|
||||||
printf ("\n\n%-23s %9s %9s %9s %9s %9s\n\n",
|
|
||||||
"", "Blocks", "Free", "Avail", "Files", "Free");
|
|
||||||
|
|
||||||
for (index = 0; index < mount_list.number; index++) {
|
|
||||||
glibtop_get_fsusage (&fsusage,
|
|
||||||
mount_entries [index].mountdir);
|
|
||||||
|
|
||||||
printf ("Usage: %-16s %9Lu %9Lu %9Lu %9Lu %9Lu\n",
|
|
||||||
mount_entries [index].mountdir,
|
|
||||||
fsusage.blocks, fsusage.bfree,
|
|
||||||
fsusage.bavail, fsusage.files,
|
|
||||||
fsusage.ffree);
|
|
||||||
}
|
|
||||||
|
|
||||||
glibtop_free (mount_entries);
|
|
||||||
|
|
||||||
printf ("\nsbrk (0) = %p\n\n", sbrk (0));
|
|
||||||
|
|
||||||
glibtop_close ();
|
|
||||||
|
|
||||||
exit (0);
|
|
||||||
}
|
|
@@ -41,12 +41,12 @@ main (int argc, char *argv [])
|
|||||||
bindtextdomain (PACKAGE, GTOPLOCALEDIR);
|
bindtextdomain (PACKAGE, GTOPLOCALEDIR);
|
||||||
textdomain (PACKAGE);
|
textdomain (PACKAGE);
|
||||||
|
|
||||||
glibtop_init ();
|
glibtop_init__r (&glibtop_global_server);
|
||||||
|
|
||||||
glibtop_get_sysdeps (&sysdeps);
|
glibtop_get_sysdeps (&sysdeps);
|
||||||
|
|
||||||
fprintf (stderr, "Sysdeps (0x%08Lx): %Lu, %Lu, %Lu, %Lu, %Lu, "
|
fprintf (stderr, "Sysdeps (0x%08lx): %lu, %lu, %lu, %lu, %lu, "
|
||||||
"%Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu, %Lu\n",
|
"%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
|
||||||
sysdeps.flags, sysdeps.cpu, sysdeps.mem, sysdeps.swap,
|
sysdeps.flags, sysdeps.cpu, sysdeps.mem, sysdeps.swap,
|
||||||
sysdeps.uptime, sysdeps.loadavg, sysdeps.shm_limits,
|
sysdeps.uptime, sysdeps.loadavg, sysdeps.shm_limits,
|
||||||
sysdeps.msg_limits, sysdeps.sem_limits,
|
sysdeps.msg_limits, sysdeps.sem_limits,
|
||||||
@@ -59,7 +59,7 @@ main (int argc, char *argv [])
|
|||||||
|
|
||||||
ptr = glibtop_get_proclist (&proclist);
|
ptr = glibtop_get_proclist (&proclist);
|
||||||
|
|
||||||
fprintf (stderr, "Proclist (0x%08Lx): %Ld, %Ld, %Ld\n",
|
fprintf (stderr, "Proclist (0x%08lx): %ld, %ld, %ld\n",
|
||||||
proclist.flags, proclist.number, proclist.size,
|
proclist.flags, proclist.number, proclist.size,
|
||||||
proclist.total);
|
proclist.total);
|
||||||
|
|
||||||
@@ -73,14 +73,14 @@ main (int argc, char *argv [])
|
|||||||
|
|
||||||
glibtop_get_proc_state (&data.proc_state, pid);
|
glibtop_get_proc_state (&data.proc_state, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_State PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_State PID %5u (0x%08lx): "
|
||||||
"'%s', %c, %u, %u\n", pid, data.proc_state.flags,
|
"'%s', %c, %u, %u\n", pid, data.proc_state.flags,
|
||||||
data.proc_state.cmd, data.proc_state.state,
|
data.proc_state.cmd, data.proc_state.state,
|
||||||
data.proc_state.uid, data.proc_state.gid);
|
data.proc_state.uid, data.proc_state.gid);
|
||||||
|
|
||||||
glibtop_get_proc_uid (&data.proc_uid, pid);
|
glibtop_get_proc_uid (&data.proc_uid, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_Uid PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Uid PID %5u (0x%08lx): "
|
||||||
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
|
||||||
pid, data.proc_uid.flags, data.proc_uid.uid,
|
pid, data.proc_uid.flags, data.proc_uid.uid,
|
||||||
data.proc_uid.euid, data.proc_uid.gid,
|
data.proc_uid.euid, data.proc_uid.gid,
|
||||||
@@ -92,16 +92,16 @@ main (int argc, char *argv [])
|
|||||||
|
|
||||||
glibtop_get_proc_mem (&data.proc_mem, pid);
|
glibtop_get_proc_mem (&data.proc_mem, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_Mem PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Mem PID %5u (0x%08lx): "
|
||||||
"%Ld %Ld %Ld %Ld %Ld %Ld\n", pid, data.proc_mem.flags,
|
"%ld %ld %ld %ld %ld %ld\n", pid, data.proc_mem.flags,
|
||||||
data.proc_mem.size, data.proc_mem.vsize,
|
data.proc_mem.size, data.proc_mem.vsize,
|
||||||
data.proc_mem.resident, data.proc_mem.share,
|
data.proc_mem.resident, data.proc_mem.share,
|
||||||
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
data.proc_mem.rss, data.proc_mem.rss_rlim);
|
||||||
|
|
||||||
glibtop_get_proc_time (&data.proc_time, pid);
|
glibtop_get_proc_time (&data.proc_time, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_Time PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Time PID %5u (0x%08lx): "
|
||||||
"%Ld %Ld %Ld %Ld %Ld %Ld %Ld\n", pid, data.proc_time.flags,
|
"%ld %ld %ld %ld %ld %ld %ld\n", pid, data.proc_time.flags,
|
||||||
data.proc_time.start_time, data.proc_time.utime,
|
data.proc_time.start_time, data.proc_time.utime,
|
||||||
data.proc_time.stime, data.proc_time.cutime,
|
data.proc_time.stime, data.proc_time.cutime,
|
||||||
data.proc_time.cstime, data.proc_time.timeout,
|
data.proc_time.cstime, data.proc_time.timeout,
|
||||||
@@ -109,15 +109,15 @@ main (int argc, char *argv [])
|
|||||||
|
|
||||||
glibtop_get_proc_signal (&data.proc_signal, pid);
|
glibtop_get_proc_signal (&data.proc_signal, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_Signal PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Signal PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu\n", pid, data.proc_signal.flags,
|
"%d %d %d %d\n", pid, data.proc_signal.flags,
|
||||||
data.proc_signal.signal, data.proc_signal.blocked,
|
data.proc_signal.signal, data.proc_signal.blocked,
|
||||||
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
data.proc_signal.sigignore, data.proc_signal.sigcatch);
|
||||||
|
|
||||||
glibtop_get_proc_kernel (&data.proc_kernel, pid);
|
glibtop_get_proc_kernel (&data.proc_kernel, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_Kernel PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Kernel PID %5u (0x%08lx): "
|
||||||
"%Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu\n", pid,
|
"%lu %lu %lu %lu %lu %lu %lu %lu\n", pid,
|
||||||
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
data.proc_kernel.flags, data.proc_kernel.k_flags,
|
||||||
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
data.proc_kernel.min_flt, data.proc_kernel.maj_flt,
|
||||||
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt,
|
||||||
@@ -126,8 +126,8 @@ main (int argc, char *argv [])
|
|||||||
|
|
||||||
glibtop_get_proc_segment (&data.proc_segment, pid);
|
glibtop_get_proc_segment (&data.proc_segment, pid);
|
||||||
|
|
||||||
fprintf (stderr, "Proc_Segment PID %5u (0x%08Lx): "
|
fprintf (stderr, "Proc_Segment PID %5u (0x%08lx): "
|
||||||
"%Ld %Ld %Ld %Ld %Lu %Lu %Lu\n", pid, data.proc_segment.flags,
|
"%ld %ld %ld %ld %lu %lu %lu\n", pid, data.proc_segment.flags,
|
||||||
data.proc_segment.trs, data.proc_segment.lrs,
|
data.proc_segment.trs, data.proc_segment.lrs,
|
||||||
data.proc_segment.drs, data.proc_segment.dt,
|
data.proc_segment.drs, data.proc_segment.dt,
|
||||||
data.proc_segment.start_code, data.proc_segment.end_code,
|
data.proc_segment.start_code, data.proc_segment.end_code,
|
||||||
|
@@ -1,80 +0,0 @@
|
|||||||
(display (glibtop-names-sysdeps)) (newline)
|
|
||||||
(display (glibtop-labels-sysdeps)) (newline)
|
|
||||||
(display (glibtop-descriptions-sysdeps)) (newline)
|
|
||||||
(display (glibtop-types-sysdeps)) (newline)
|
|
||||||
|
|
||||||
(newline)
|
|
||||||
|
|
||||||
(display (glibtop-names-cpu)) (newline)
|
|
||||||
(display (glibtop-names-mem)) (newline)
|
|
||||||
(display (glibtop-names-swap)) (newline)
|
|
||||||
(display (glibtop-names-uptime)) (newline)
|
|
||||||
(display (glibtop-names-loadavg)) (newline)
|
|
||||||
(display (glibtop-names-shm_limits)) (newline)
|
|
||||||
(display (glibtop-names-msg_limits)) (newline)
|
|
||||||
(display (glibtop-names-sem_limits)) (newline)
|
|
||||||
(display (glibtop-names-proclist)) (newline)
|
|
||||||
(display (glibtop-names-proc_state)) (newline)
|
|
||||||
(display (glibtop-names-proc_uid)) (newline)
|
|
||||||
(display (glibtop-names-proc_mem)) (newline)
|
|
||||||
(display (glibtop-names-proc_time)) (newline)
|
|
||||||
(display (glibtop-names-proc_signal)) (newline)
|
|
||||||
(display (glibtop-names-proc_kernel)) (newline)
|
|
||||||
(display (glibtop-names-proc_segment)) (newline)
|
|
||||||
|
|
||||||
(newline)
|
|
||||||
|
|
||||||
(display (glibtop-labels-cpu)) (newline)
|
|
||||||
(display (glibtop-labels-mem)) (newline)
|
|
||||||
(display (glibtop-labels-swap)) (newline)
|
|
||||||
(display (glibtop-labels-uptime)) (newline)
|
|
||||||
(display (glibtop-labels-loadavg)) (newline)
|
|
||||||
(display (glibtop-labels-shm_limits)) (newline)
|
|
||||||
(display (glibtop-labels-msg_limits)) (newline)
|
|
||||||
(display (glibtop-labels-sem_limits)) (newline)
|
|
||||||
(display (glibtop-labels-proclist)) (newline)
|
|
||||||
(display (glibtop-labels-proc_state)) (newline)
|
|
||||||
(display (glibtop-labels-proc_uid)) (newline)
|
|
||||||
(display (glibtop-labels-proc_mem)) (newline)
|
|
||||||
(display (glibtop-labels-proc_time)) (newline)
|
|
||||||
(display (glibtop-labels-proc_signal)) (newline)
|
|
||||||
(display (glibtop-labels-proc_kernel)) (newline)
|
|
||||||
(display (glibtop-labels-proc_segment)) (newline)
|
|
||||||
|
|
||||||
(newline)
|
|
||||||
|
|
||||||
(display (glibtop-descriptions-cpu)) (newline)
|
|
||||||
(display (glibtop-descriptions-mem)) (newline)
|
|
||||||
(display (glibtop-descriptions-swap)) (newline)
|
|
||||||
(display (glibtop-descriptions-uptime)) (newline)
|
|
||||||
(display (glibtop-descriptions-loadavg)) (newline)
|
|
||||||
(display (glibtop-descriptions-shm_limits)) (newline)
|
|
||||||
(display (glibtop-descriptions-msg_limits)) (newline)
|
|
||||||
(display (glibtop-descriptions-sem_limits)) (newline)
|
|
||||||
(display (glibtop-descriptions-proclist)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_state)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_uid)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_mem)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_time)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_signal)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_kernel)) (newline)
|
|
||||||
(display (glibtop-descriptions-proc_segment)) (newline)
|
|
||||||
|
|
||||||
(newline)
|
|
||||||
|
|
||||||
(display (glibtop-types-cpu)) (newline)
|
|
||||||
(display (glibtop-types-mem)) (newline)
|
|
||||||
(display (glibtop-types-swap)) (newline)
|
|
||||||
(display (glibtop-types-uptime)) (newline)
|
|
||||||
(display (glibtop-types-loadavg)) (newline)
|
|
||||||
(display (glibtop-types-shm_limits)) (newline)
|
|
||||||
(display (glibtop-types-msg_limits)) (newline)
|
|
||||||
(display (glibtop-types-sem_limits)) (newline)
|
|
||||||
(display (glibtop-types-proclist)) (newline)
|
|
||||||
(display (glibtop-types-proc_state)) (newline)
|
|
||||||
(display (glibtop-types-proc_uid)) (newline)
|
|
||||||
(display (glibtop-types-proc_mem)) (newline)
|
|
||||||
(display (glibtop-types-proc_time)) (newline)
|
|
||||||
(display (glibtop-types-proc_signal)) (newline)
|
|
||||||
(display (glibtop-types-proc_kernel)) (newline)
|
|
||||||
(display (glibtop-types-proc_segment)) (newline)
|
|
18
features.def
18
features.def
@@ -1,18 +0,0 @@
|
|||||||
void|cpu|ulong(total,user,nice,sys,idle,frequency)
|
|
||||||
void|mem|ulong(total,used,free,shared,buffer,cached,user,locked)
|
|
||||||
void|swap|ulong(total,used,free,pagein,pageout)
|
|
||||||
void|uptime|double(uptime,idletime)
|
|
||||||
void|loadavg|double(loadavg[0],loadavg[1],loadavg[2])
|
|
||||||
void|shm_limits|ulong(shmmax,shmmin,shmmni,shmseg,shmall)
|
|
||||||
void|msg_limits|ulong(msgpool,msgmap,msgmax,msgmnb,msgmni,msgssz,msgtql)
|
|
||||||
void|sem_limits|ulong(semmap,semmni,semmns,semmnu,semmsl,semopm,semume,semusz,semvmx,semaem)
|
|
||||||
unsigned *|proclist|ulong(number,size,total)
|
|
||||||
void|proc_state|str(cmd):char(state):ulong(uid,gid)|pid_t|pid
|
|
||||||
void|proc_uid|long(uid,euid,gid,egid,pid,ppid,pgrp,session,tty,tpgid,priority,nice)|pid_t|pid
|
|
||||||
void|proc_mem|long(size,vsize,resident,share,rss,rss_rlim)|pid_t|pid
|
|
||||||
void|proc_time|long(start_time,utime,stime,cutime,cstime,timeout,it_real_value)|pid_t|pid
|
|
||||||
void|proc_signal|ulong(signal,blocked,sigignore,sigcatch)|pid_t|pid
|
|
||||||
void|proc_kernel|ulong(k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt,kstk_esp,kstk_eip,wchan)|pid_t|pid
|
|
||||||
void|proc_segment|long(trs,lrs,drs,dt):ulong(start_code,end_code,start_stack)|pid_t|pid
|
|
||||||
glibtop_mountentry *|@mountlist|ulong(number,size,total)|int|all_fs
|
|
||||||
void|@fsusage|ulong(blocks,bfree,bavail,files,ffree)|const char *|mount_dir|strlen (mount_dir) + 1
|
|
24
glibtop.h
24
glibtop.h
@@ -24,9 +24,6 @@
|
|||||||
|
|
||||||
#include <glibtop/global.h>
|
#include <glibtop/global.h>
|
||||||
|
|
||||||
#include <glibtop_server.h>
|
|
||||||
#include <glibtop/types.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_GLIBTOP_MACHINE_H
|
#ifdef HAVE_GLIBTOP_MACHINE_H
|
||||||
#include <glibtop_machine.h>
|
#include <glibtop_machine.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -35,37 +32,24 @@ typedef struct _glibtop glibtop;
|
|||||||
|
|
||||||
struct _glibtop
|
struct _glibtop
|
||||||
{
|
{
|
||||||
unsigned flags;
|
int fd; /* Server file descriptor */
|
||||||
unsigned method; /* Server Method */
|
|
||||||
#ifdef HAVE_GLIBTOP_MACHINE_H
|
#ifdef HAVE_GLIBTOP_MACHINE_H
|
||||||
glibtop_machine machine; /* Machine dependent data */
|
glibtop_machine machine; /* Machine dependent data */
|
||||||
#endif
|
#endif
|
||||||
int input [2]; /* Pipe client <- server */
|
int input [2]; /* Pipe client <- server */
|
||||||
int output [2]; /* Pipe client -> server */
|
int output [2]; /* Pipe client -> server */
|
||||||
int socket; /* Accepted connection of a socket */
|
|
||||||
unsigned long os_version_code; /* Version code of the operating system */
|
unsigned long os_version_code; /* Version code of the operating system */
|
||||||
const char *name; /* Program name for error messages */
|
const char *name; /* Program name for error messages */
|
||||||
const char *server_command; /* Command used to invoke server */
|
|
||||||
const char *server_host; /* Host the server should run on */
|
|
||||||
const char *server_user; /* Name of the user on the target host */
|
|
||||||
const char *server_rsh; /* Command used to connect to the target host */
|
|
||||||
unsigned long features; /* Server is required for this features */
|
|
||||||
unsigned long server_port; /* Port on which daemon is listening */
|
|
||||||
pid_t pid; /* PID of the server */
|
pid_t pid; /* PID of the server */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern glibtop *glibtop_global_server;
|
extern glibtop *glibtop_global_server;
|
||||||
|
|
||||||
extern const unsigned long glibtop_server_features;
|
#define glibtop_init() glibtop_init__r(&glibtop_global_server);
|
||||||
|
|
||||||
#define glibtop_init() glibtop_init_r(&glibtop_global_server, 0, 0);
|
extern glibtop *glibtop_init__r __P((glibtop **));
|
||||||
|
|
||||||
#define glibtop_close() glibtop_close_r(glibtop_global_server);
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
extern glibtop *glibtop_init_r __P((glibtop **, const unsigned long, const unsigned));
|
|
||||||
extern glibtop *glibtop_init_s __P((glibtop **, const unsigned long, const unsigned));
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
|
@@ -1,3 +1 @@
|
|||||||
reference.sgml
|
reference.sgml
|
||||||
Makefile.in
|
|
||||||
Makefile
|
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
1998-07-29 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* dynamic.c, dynamic_names.c: New files.
|
|
||||||
|
|
||||||
* Makefile.am: New file. Creates `libgtop.so' and
|
|
||||||
`libnames.so' which will be installed in
|
|
||||||
`$(datadir)/guile/libgtop'; just do a
|
|
||||||
`(use-modules (libgtop libgtop) (libgtop names))' in
|
|
||||||
guile to use them.
|
|
@@ -1,51 +0,0 @@
|
|||||||
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
CFLAGS = -Wall -W @CFLAGS@
|
|
||||||
|
|
||||||
sitedir = $(datadir)/guile/site
|
|
||||||
libgtopmoduledir = $(datadir)/guile/libgtop
|
|
||||||
|
|
||||||
libgtopmodule_LTLIBRARIES = libgtop.la libnames.la
|
|
||||||
|
|
||||||
libgtop_la_SOURCES = dynamic.c
|
|
||||||
|
|
||||||
libnames_la_SOURCES = dynamic_names.c
|
|
||||||
|
|
||||||
libgtop_la_LIBADD = ../sysdeps/guile/guile.lo \
|
|
||||||
../lib/init.lo \
|
|
||||||
../lib/open.lo \
|
|
||||||
../lib/close.lo \
|
|
||||||
../lib/command.lo \
|
|
||||||
../lib/read.lo \
|
|
||||||
../lib/read_data.lo \
|
|
||||||
../lib/write.lo \
|
|
||||||
../lib/lib.lo \
|
|
||||||
../lib/parameter.lo \
|
|
||||||
../lib/sysdeps.lo \
|
|
||||||
../sysdeps/common/error.lo \
|
|
||||||
../sysdeps/common/fsusage.lo \
|
|
||||||
../sysdeps/common/gnuslib.lo \
|
|
||||||
../sysdeps/common/mountlist.lo \
|
|
||||||
../sysdeps/common/xmalloc.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/close.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/proclist.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/sem_limits.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/cpu.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/procmem.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/shm_limits.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/loadavg.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/procsegment.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/siglist.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/mem.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/procsignal.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/swap.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/msg_limits.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/procstate.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/uptime.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/open.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/proctime.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/prockernel.lo \
|
|
||||||
../sysdeps/@sysdeps_dir@/procuid.lo
|
|
||||||
|
|
||||||
libnames_la_LIBADD = ../sysdeps/guile/names/guile-names.lo
|
|
||||||
|
|
@@ -5,5 +5,4 @@ glibtop_HEADERS = close.h loadavg.h prockernel.h procstate.h \
|
|||||||
proctime.h shm_limits.h version.h cpu.h msg_limits.h \
|
proctime.h shm_limits.h version.h cpu.h msg_limits.h \
|
||||||
procmem.h procuid.h swap.h write.h error.h open.h \
|
procmem.h procuid.h swap.h write.h error.h open.h \
|
||||||
procsegment.h read.h sysdeps.h xmalloc.h global.h \
|
procsegment.h read.h sysdeps.h xmalloc.h global.h \
|
||||||
output.h procsignal.h read_data.h union.h types.h \
|
output.h procsignal.h read_data.h union.h
|
||||||
parameter.h mountlist.h fsusage.h
|
|
||||||
|
@@ -26,10 +26,7 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
extern void glibtop_close_r __P((glibtop *));
|
extern void glibtop_close __P((glibtop *));
|
||||||
|
|
||||||
extern void glibtop_close_s __P((glibtop *));
|
|
||||||
extern void glibtop_close_p __P((glibtop *));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -29,7 +29,6 @@ __BEGIN_DECLS
|
|||||||
|
|
||||||
#define GLIBTOP_CMND_QUIT 0
|
#define GLIBTOP_CMND_QUIT 0
|
||||||
#define GLIBTOP_CMND_SYSDEPS 1
|
#define GLIBTOP_CMND_SYSDEPS 1
|
||||||
|
|
||||||
#define GLIBTOP_CMND_CPU 2
|
#define GLIBTOP_CMND_CPU 2
|
||||||
#define GLIBTOP_CMND_MEM 3
|
#define GLIBTOP_CMND_MEM 3
|
||||||
#define GLIBTOP_CMND_SWAP 4
|
#define GLIBTOP_CMND_SWAP 4
|
||||||
@@ -48,42 +47,20 @@ __BEGIN_DECLS
|
|||||||
#define GLIBTOP_CMND_PROC_KERNEL 16
|
#define GLIBTOP_CMND_PROC_KERNEL 16
|
||||||
#define GLIBTOP_CMND_PROC_SEGMENT 17
|
#define GLIBTOP_CMND_PROC_SEGMENT 17
|
||||||
|
|
||||||
#define GLIBTOP_CMND_MOUNTLIST 18
|
#define GLIBTOP_MAX_CMND 18
|
||||||
#define GLIBTOP_CMND_FSUSAGE 19
|
|
||||||
|
|
||||||
#define GLIBTOP_MAX_CMND 20
|
typedef struct _glibtop_command glibtop_command;
|
||||||
|
|
||||||
#define _GLIBTOP_PARAM_SIZE 16
|
|
||||||
|
|
||||||
typedef struct _glibtop_command glibtop_command;
|
|
||||||
|
|
||||||
typedef struct _glibtop_response glibtop_response;
|
|
||||||
typedef union _glibtop_response_union glibtop_response_union;
|
|
||||||
|
|
||||||
struct _glibtop_command
|
struct _glibtop_command
|
||||||
{
|
{
|
||||||
u_int64_t command;
|
glibtop server;
|
||||||
u_int64_t size, data_size;
|
unsigned command;
|
||||||
char parameter [_GLIBTOP_PARAM_SIZE];
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
union _glibtop_response_union
|
#define glibtop_call(p1, p2, p3, p4) glibtop_call__r(glibtop_global_server, p1, p2, p3, p4)
|
||||||
{
|
|
||||||
glibtop_union data;
|
|
||||||
glibtop_sysdeps sysdeps;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _glibtop_response
|
extern void *glibtop_call__r __P((glibtop *, unsigned, size_t, void *, size_t, void *));
|
||||||
{
|
|
||||||
int64_t offset;
|
|
||||||
u_int64_t size, data_size;
|
|
||||||
glibtop_response_union u;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define glibtop_call(p1, p2, p3, p4) glibtop_call_r(glibtop_global_server, p1, p2, p3, p4)
|
|
||||||
|
|
||||||
extern void *glibtop_call_l __P((glibtop *, unsigned, size_t, void *, size_t, void *));
|
|
||||||
extern void *glibtop_call_s __P((glibtop *, unsigned, size_t, void *, size_t, void *));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ typedef struct _glibtop_cpu glibtop_cpu;
|
|||||||
|
|
||||||
struct _glibtop_cpu
|
struct _glibtop_cpu
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
total, /* GLIBTOP_CPU_TOTAL */
|
total, /* GLIBTOP_CPU_TOTAL */
|
||||||
user, /* GLIBTOP_CPU_USER */
|
user, /* GLIBTOP_CPU_USER */
|
||||||
nice, /* GLIBTOP_CPU_NICE */
|
nice, /* GLIBTOP_CPU_NICE */
|
||||||
@@ -49,23 +49,11 @@ struct _glibtop_cpu
|
|||||||
frequency; /* GLIBTOP_CPU_FREQUENCY */
|
frequency; /* GLIBTOP_CPU_FREQUENCY */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_cpu(cpu) glibtop_get_cpu_l(glibtop_global_server, cpu)
|
#define glibtop_get_cpu(cpu) glibtop_get_cpu__r(glibtop_global_server, cpu)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_CPU
|
extern void glibtop_get_cpu__r __P((glibtop *, glibtop_cpu *));
|
||||||
#define glibtop_get_cpu_r glibtop_get_cpu_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_cpu_r glibtop_get_cpu_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_cpu_l __P((glibtop *, glibtop_cpu *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_CPU
|
|
||||||
extern void glibtop_get_cpu_p __P((glibtop *, glibtop_cpu *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_cpu_s __P((glibtop *, glibtop_cpu *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -89,7 +77,7 @@ extern SCM glibtop_guile_descriptions_cpu __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_cpu [];
|
extern const char *glibtop_names_cpu [];
|
||||||
extern const unsigned glibtop_types_cpu [];
|
extern const char *glibtop_types_cpu [];
|
||||||
extern const char *glibtop_labels_cpu [];
|
extern const char *glibtop_labels_cpu [];
|
||||||
extern const char *glibtop_descriptions_cpu [];
|
extern const char *glibtop_descriptions_cpu [];
|
||||||
|
|
||||||
|
@@ -26,17 +26,9 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
#define glibtop_error(p1, args...) glibtop_error_r(glibtop_global_server , p1 , ## args)
|
#define glibtop_error(p1, args...) glibtop_error__r(glibtop_global_server , p1 , ## args)
|
||||||
#define glibtop_warn(p1, args...) glibtop_warn_r(glibtop_global_server , p1 , ## args)
|
|
||||||
|
|
||||||
#define glibtop_error_io(p1, args...) glibtop_error_io_r(glibtop_global_server , p1 , ## args)
|
extern void glibtop_error__r __P((glibtop *, char *, ...));
|
||||||
#define glibtop_warn_io(p1, args...) glibtop_warn_io_r(glibtop_global_server , p1 , ## args)
|
|
||||||
|
|
||||||
extern void glibtop_error_r __P((glibtop *, char *, ...));
|
|
||||||
extern void glibtop_warn_r __P((glibtop *, char *, ...));
|
|
||||||
|
|
||||||
extern void glibtop_error_io_r __P((glibtop *, char *, ...));
|
|
||||||
extern void glibtop_warn_io_r __P((glibtop *, char *, ...));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -1,90 +0,0 @@
|
|||||||
/* $Id$ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
This file is part of the Gnome Top Library.
|
|
||||||
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
|
||||||
|
|
||||||
The Gnome Top Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The Gnome Top Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifndef __GLIBTOP_FSUSAGE_H__
|
|
||||||
#define __GLIBTOP_FSUSAGE_H__
|
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/global.h>
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
#define GLIBTOP_FSUSAGE_BLOCKS 0
|
|
||||||
#define GLIBTOP_FSUSAGE_BFREE 1
|
|
||||||
#define GLIBTOP_FSUSAGE_BAVAIL 2
|
|
||||||
#define GLIBTOP_FSUSAGE_FILES 3
|
|
||||||
#define GLIBTOP_FSUSAGE_FFREE 4
|
|
||||||
|
|
||||||
#define GLIBTOP_MAX_FSUSAGE 5
|
|
||||||
|
|
||||||
typedef struct _glibtop_fsusage glibtop_fsusage;
|
|
||||||
|
|
||||||
struct _glibtop_fsusage
|
|
||||||
{
|
|
||||||
u_int64_t flags,
|
|
||||||
blocks, /* Total blocks. */
|
|
||||||
bfree, /* Free blocks available to superuser. */
|
|
||||||
bavail, /* Free blocks available to non-superuser. */
|
|
||||||
files, /* Total file nodes. */
|
|
||||||
ffree; /* Free file nodes. */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define glibtop_get_fsusage(fsusage,disk) glibtop_get_fsusage_l(glibtop_global_server, fsusage, disk)
|
|
||||||
|
|
||||||
#define glibtop_get_fsusage_r glibtop_get_fsusage_s
|
|
||||||
|
|
||||||
extern void glibtop_get_fsusage_l __P((glibtop *, glibtop_fsusage *, const char *));
|
|
||||||
|
|
||||||
extern void glibtop_get_fsusage_s __P((glibtop *, glibtop_fsusage *, const char *));
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
|
||||||
|
|
||||||
extern SCM glibtop_guile_get_fsusage __P((SCM));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE_NAMES
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile_names to get this stuff here. */
|
|
||||||
|
|
||||||
extern SCM glibtop_guile_names_fsusage __P((void));
|
|
||||||
extern SCM glibtop_guile_types_fsusage __P((void));
|
|
||||||
extern SCM glibtop_guile_labels_fsusage __P((void));
|
|
||||||
extern SCM glibtop_guile_descriptions_fsusage __P((void));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_NAMES
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
|
||||||
|
|
||||||
extern const char *glibtop_names_fsusage [];
|
|
||||||
extern const unsigned glibtop_types_fsusage [];
|
|
||||||
extern const char *glibtop_labels_fsusage [];
|
|
||||||
extern const char *glibtop_descriptions_fsusage [];
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@@ -51,23 +51,7 @@
|
|||||||
# define __P(protos) ()
|
# define __P(protos) ()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TIME_WITH_SYS_TIME
|
#ifdef HAVE_GUILE
|
||||||
# include <sys/time.h>
|
|
||||||
# include <time.h>
|
|
||||||
#else
|
|
||||||
# if HAVE_SYS_TIME_H
|
|
||||||
# include <sys/time.h>
|
|
||||||
# else
|
|
||||||
# include <time.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WITHOUT_GUILE
|
|
||||||
#undef GLIBTOP_GUILE
|
|
||||||
#undef GLIBTOP_GUILE_NAMES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
#include <guile/gh.h>
|
#include <guile/gh.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -83,10 +67,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_MEMORY_H
|
#ifdef HAVE_MEMORY_H
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -94,9 +75,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
@@ -1,158 +0,0 @@
|
|||||||
/* -*-C-*-
|
|
||||||
|
|
||||||
Header file for the GNU Emacs server and client C code.
|
|
||||||
|
|
||||||
This file is part of GNU Emacs.
|
|
||||||
|
|
||||||
Copying is permitted under those conditions described by the GNU
|
|
||||||
General Public License.
|
|
||||||
|
|
||||||
Copyright (C) 1989 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
Author: Andy Norman (ange@hplb.hpl.hp.com), based on
|
|
||||||
'etc/server.c' and 'etc/emacsclient.c' from the 18.52 GNU
|
|
||||||
Emacs distribution.
|
|
||||||
|
|
||||||
Please mail bugs and suggestions to the author at the above address.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* HISTORY
|
|
||||||
* 11-Nov-1990 bristor@simba
|
|
||||||
* Added EOT stuff.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file incorporates new features added by Bob Weiner <weiner@mot.com>,
|
|
||||||
* Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>.
|
|
||||||
* Please see the note at the end of the README file for details.
|
|
||||||
*
|
|
||||||
* (If gnuserv came bundled with your emacs, the README file is probably
|
|
||||||
* ../etc/gnuserv.README relative to the directory containing this file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static char header_rcsid [] = "!Header: gnuserv.h,v 2.4 95/02/16 11:58:11 arup alpha !";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define NO_SHORTNAMES
|
|
||||||
|
|
||||||
#define PATCHLEVEL 2
|
|
||||||
|
|
||||||
#define NO_SHORTNAMES
|
|
||||||
/* gnuserv should not be compiled using SOCKS */
|
|
||||||
#define DO_NOT_SOCKSIFY
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/error.h>
|
|
||||||
#undef read
|
|
||||||
#undef write
|
|
||||||
#undef open
|
|
||||||
#undef close
|
|
||||||
#undef signal
|
|
||||||
|
|
||||||
/* Define the communication method between server and clients:
|
|
||||||
* You can have either or both kinds of sockets, but you can't mix
|
|
||||||
* sockets with sysv ipc
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define INTERNET_DOMAIN_SOCKETS
|
|
||||||
#define UNIX_DOMAIN_SOCKETS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define additional authentication protocols to be used. These methods will
|
|
||||||
* be tried before falling back to the default gnuserv protocol (based on
|
|
||||||
* the GNU_SECURE environment variable). Currently, only MIT-MAGIC-COOKIE-1
|
|
||||||
* is also supported.
|
|
||||||
*
|
|
||||||
* Comment out the next line(s) if you don't want to enable the
|
|
||||||
* appropriate authentication protocol.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined (HAVE_XAUTH)
|
|
||||||
#define AUTH_MAGIC_COOKIE
|
|
||||||
#endif /* HAVE_XAUTH */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* stuff related to supporting MIT-MAGIC-COOKIE-1
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define MCOOKIE_SCREEN "42980" /* screen # to use as the gnuserv cookie */
|
|
||||||
#define MCOOKIE_NAME "MAGIC-1" /* authentication protocol name */
|
|
||||||
#define MCOOKIE_X_NAME "MIT-MAGIC-COOKIE-1" /* as needed by X */
|
|
||||||
|
|
||||||
|
|
||||||
#define DEFAUTH_NAME "GNU-SECURE" /* name of default auth protocol */
|
|
||||||
#define AUTH_TIMEOUT 15 /* # seconds to wait for auth data */
|
|
||||||
#define AUTH_NAMESZ 15 /* max allows auth protocol name size */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Pick a default communication scheme, if none was specified.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(UNIX_DOMAIN_SOCKETS) && !defined(INTERNET_DOMAIN_SOCKETS)
|
|
||||||
|
|
||||||
/* BSD systems use Unix Domain sockets by default */
|
|
||||||
|
|
||||||
#ifdef BSD
|
|
||||||
#define UNIX_DOMAIN_SOCKETS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* No communication method pre-defined */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If you are using SYSV_IPC, you might want to make the buffer size bigger
|
|
||||||
* since it limits the size of requests and responses. Don't make it bigger
|
|
||||||
* than your system's max message size though (usually a couple of k) or else
|
|
||||||
* msgsend will start failing. For sockets, using the system BUFSIZ is usually
|
|
||||||
* what you want.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */
|
|
||||||
|
|
||||||
#ifdef INTERNET_DOMAIN_SOCKETS
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#define TABLE_SIZE 101 /* The number of entries in the hash table */
|
|
||||||
#define HASH(host) host /* Rather simplistic hash function */
|
|
||||||
#define DEFAULT_PORT 21490 /* default port number to use is
|
|
||||||
* DEFAULT_PORT + uid */
|
|
||||||
#endif /* INTERNET_DOMAIN_SOCKETS */
|
|
||||||
|
|
||||||
#ifdef UNIX_DOMAIN_SOCKETS
|
|
||||||
#include <sys/un.h>
|
|
||||||
#define HIDE_UNIX_SOCKET /* put the unix socket in a protected dir */
|
|
||||||
#endif /* UNIX_DOMAIN_SOCKETS */
|
|
||||||
|
|
||||||
#define HOSTNAMSZ 255 /* max size of a hostname */
|
|
||||||
#define REPLYSIZ 300 /* max size of reply from server to client */
|
|
||||||
#undef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#undef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
|
|
||||||
/* The casts shut Sun's compiler up and are safe in the context these
|
|
||||||
are actually used. */
|
|
||||||
#define max2(x,y) (((int) (x) > (int) (y)) ? (x) : (y))
|
|
||||||
#define min2(x,y) (((int) (x) < (int) (y)) ? (x) : (y))
|
|
||||||
|
|
||||||
#ifndef _NFILE /* rough guess at maximum number of open files */
|
|
||||||
#define _NFILE 20
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EOT_STR "\004"
|
|
||||||
#define EOT_CHR '\004'
|
|
||||||
|
|
||||||
/* connection types */
|
|
||||||
#define CONN_UNIX 0
|
|
||||||
#define CONN_INTERNET 1
|
|
||||||
#define CONN_IPC 2
|
|
||||||
|
|
||||||
/* function declarations */
|
|
||||||
extern int glibtop_make_connection __P((const char *, int, int *));
|
|
||||||
|
|
||||||
#ifdef INTERNET_DOMAIN_SOCKETS
|
|
||||||
extern long glibtop_internet_addr __P((const char *));
|
|
||||||
#endif
|
|
@@ -35,27 +35,15 @@ typedef struct _glibtop_loadavg glibtop_loadavg;
|
|||||||
|
|
||||||
struct _glibtop_loadavg
|
struct _glibtop_loadavg
|
||||||
{
|
{
|
||||||
u_int64_t flags;
|
unsigned long flags;
|
||||||
double loadavg [3]; /* GLIBTOP_LOADAVG_LOADAVG */
|
double loadavg [3]; /* GLIBTOP_LOADAVG_LOADAVG */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_loadavg(loadavg) glibtop_get_loadavg_l(glibtop_global_server, loadavg)
|
#define glibtop_get_loadavg(loadavg) glibtop_get_loadavg__r(glibtop_global_server, loadavg)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_LOADAVG
|
extern void glibtop_get_loadavg__r __P((glibtop *, glibtop_loadavg *));
|
||||||
#define glibtop_get_loadavg_r glibtop_get_loadavg_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_loadavg_r glibtop_get_loadavg_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_loadavg_l __P((glibtop *, glibtop_loadavg *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_LOADAVG
|
|
||||||
extern void glibtop_get_loadavg_p __P((glibtop *, glibtop_loadavg *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_loadavg_s __P((glibtop *, glibtop_loadavg *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -79,7 +67,7 @@ extern SCM glibtop_guile_descriptions_loadavg __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_loadavg [];
|
extern const char *glibtop_names_loadavg [];
|
||||||
extern const unsigned glibtop_types_loadavg [];
|
extern const char *glibtop_types_loadavg [];
|
||||||
extern const char *glibtop_labels_loadavg [];
|
extern const char *glibtop_labels_loadavg [];
|
||||||
extern const char *glibtop_descriptions_loadavg [];
|
extern const char *glibtop_descriptions_loadavg [];
|
||||||
|
|
||||||
|
@@ -42,7 +42,7 @@ typedef struct _glibtop_mem glibtop_mem;
|
|||||||
|
|
||||||
struct _glibtop_mem
|
struct _glibtop_mem
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
total, /* GLIBTOP_MEM_TOTAL */
|
total, /* GLIBTOP_MEM_TOTAL */
|
||||||
used, /* GLIBTOP_MEM_USED */
|
used, /* GLIBTOP_MEM_USED */
|
||||||
free, /* GLIBTOP_MEM_FREE */
|
free, /* GLIBTOP_MEM_FREE */
|
||||||
@@ -53,23 +53,11 @@ struct _glibtop_mem
|
|||||||
locked; /* GLIBTOP_MEM_LOCKED */
|
locked; /* GLIBTOP_MEM_LOCKED */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_mem(mem) glibtop_get_mem_l(glibtop_global_server, mem)
|
#define glibtop_get_mem(mem) glibtop_get_mem__r(glibtop_global_server, mem)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_MEM
|
extern void glibtop_get_mem__r __P((glibtop *, glibtop_mem *));
|
||||||
#define glibtop_get_mem_r glibtop_get_mem_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_mem_r glibtop_get_mem_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_mem_l __P((glibtop *, glibtop_mem *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_MEM
|
|
||||||
extern void glibtop_get_mem_p __P((glibtop *, glibtop_mem *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_mem_s __P((glibtop *, glibtop_mem *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -93,7 +81,7 @@ extern SCM glibtop_guile_descriptions_mem __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_mem [];
|
extern const char *glibtop_names_mem [];
|
||||||
extern const unsigned glibtop_types_mem [];
|
extern const char *glibtop_types_mem [];
|
||||||
extern const char *glibtop_labels_mem [];
|
extern const char *glibtop_labels_mem [];
|
||||||
extern const char *glibtop_descriptions_mem [];
|
extern const char *glibtop_descriptions_mem [];
|
||||||
|
|
||||||
|
@@ -1,98 +0,0 @@
|
|||||||
/* $Id$ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
This file is part of the Gnome Top Library.
|
|
||||||
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
|
||||||
|
|
||||||
The Gnome Top Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The Gnome Top Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifndef __GLIBTOP_MOUNTLIST_H__
|
|
||||||
#define __GLIBTOP_MOUNTLIST_H__
|
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/global.h>
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
#define GLIBTOP_MOUNTLIST_NUMBER 0
|
|
||||||
#define GLIBTOP_MOUNTLIST_TOTAL 1
|
|
||||||
#define GLIBTOP_MOUNTLIST_SIZE 2
|
|
||||||
|
|
||||||
#define GLIBTOP_MAX_MOUNTLIST 3
|
|
||||||
|
|
||||||
#define GLIBTOP_MOUNTENTRY_LEN 79
|
|
||||||
|
|
||||||
typedef struct _glibtop_mountentry glibtop_mountentry;
|
|
||||||
|
|
||||||
typedef struct _glibtop_mountlist glibtop_mountlist;
|
|
||||||
|
|
||||||
struct _glibtop_mountentry
|
|
||||||
{
|
|
||||||
u_int64_t dev;
|
|
||||||
char devname [GLIBTOP_MOUNTENTRY_LEN+1];
|
|
||||||
char mountdir [GLIBTOP_MOUNTENTRY_LEN+1];
|
|
||||||
char type [GLIBTOP_MOUNTENTRY_LEN+1];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _glibtop_mountlist
|
|
||||||
{
|
|
||||||
u_int64_t flags,
|
|
||||||
number, /* GLIBTOP_MOUNTLIST_NUMBER */
|
|
||||||
total, /* GLIBTOP_MOUNTLIST_TOTAL */
|
|
||||||
size; /* GLIBTOP_MOUNTLIST_SIZE */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define glibtop_get_mountlist(mountlist,all_fs) glibtop_get_mountlist_l(glibtop_global_server, mountlist, all_fs)
|
|
||||||
|
|
||||||
#define glibtop_get_mountlist_r glibtop_get_mountlist_s
|
|
||||||
|
|
||||||
extern glibtop_mountentry *glibtop_get_mountlist_l __P((glibtop *, glibtop_mountlist *, int));
|
|
||||||
|
|
||||||
extern glibtop_mountentry *glibtop_get_mountlist_s __P((glibtop *, glibtop_mountlist *, int));
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
|
||||||
|
|
||||||
extern SCM glibtop_guile_get_mountlist __P((SCM));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE_NAMES
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile_names to get this stuff here. */
|
|
||||||
|
|
||||||
extern SCM glibtop_guile_names_mountlist __P((void));
|
|
||||||
extern SCM glibtop_guile_types_mountlist __P((void));
|
|
||||||
extern SCM glibtop_guile_labels_mountlist __P((void));
|
|
||||||
extern SCM glibtop_guile_descriptions_mountlist __P((void));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_NAMES
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
|
||||||
|
|
||||||
extern const char *glibtop_names_mountlist [];
|
|
||||||
extern const unsigned glibtop_types_mountlist [];
|
|
||||||
extern const char *glibtop_labels_mountlist [];
|
|
||||||
extern const char *glibtop_descriptions_mountlist [];
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@@ -41,7 +41,7 @@ typedef struct _glibtop_msg_limits glibtop_msg_limits;
|
|||||||
|
|
||||||
struct _glibtop_msg_limits
|
struct _glibtop_msg_limits
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
msgpool, /* GLIBTOP_IPC_MSGPOOL */
|
msgpool, /* GLIBTOP_IPC_MSGPOOL */
|
||||||
msgmap, /* GLIBTOP_IPC_MSGMAP */
|
msgmap, /* GLIBTOP_IPC_MSGMAP */
|
||||||
msgmax, /* GLIBTOP_IPC_MSGMAX */
|
msgmax, /* GLIBTOP_IPC_MSGMAX */
|
||||||
@@ -51,23 +51,11 @@ struct _glibtop_msg_limits
|
|||||||
msgtql; /* GLIBTOP_IPC_MSGTQL */
|
msgtql; /* GLIBTOP_IPC_MSGTQL */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_msg_limits(msg) glibtop_get_msg_limits_l(glibtop_global_server, msg)
|
#define glibtop_get_msg_limits(msg) glibtop_get_msg_limits__r(glibtop_global_server, msg)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_MSG_LIMITS
|
extern void glibtop_get_msg_limits__r __P((glibtop *, glibtop_msg_limits *));
|
||||||
#define glibtop_get_msg_limits_r glibtop_get_msg_limits_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_msg_limits_r glibtop_get_msg_limits_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_msg_limits_l __P((glibtop *, glibtop_msg_limits *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_MSG_LIMITS
|
|
||||||
extern void glibtop_get_msg_limits_p __P((glibtop *, glibtop_msg_limits *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_msg_limits_s __P((glibtop *, glibtop_msg_limits *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -91,7 +79,7 @@ extern SCM glibtop_guile_descriptions_msg_limits __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_msg_limits [];
|
extern const char *glibtop_names_msg_limits [];
|
||||||
extern const unsigned glibtop_types_msg_limits [];
|
extern const char *glibtop_types_msg_limits [];
|
||||||
extern const char *glibtop_labels_msg_limits [];
|
extern const char *glibtop_labels_msg_limits [];
|
||||||
extern const char *glibtop_descriptions_msg_limits [];
|
extern const char *glibtop_descriptions_msg_limits [];
|
||||||
|
|
||||||
|
@@ -26,25 +26,7 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
#define _GLIBTOP_INIT_STATE_INIT 0x10000
|
extern void glibtop_open __P((glibtop *, const char *));
|
||||||
#define _GLIBTOP_INIT_STATE_OPEN 0x20000
|
|
||||||
#define _GLIBTOP_INIT_STATE_SERVER 0x40000
|
|
||||||
|
|
||||||
#define GLIBTOP_INIT_NO_OPEN 1
|
|
||||||
#define GLIBTOP_INIT_NO_INIT 2
|
|
||||||
|
|
||||||
#define GLIBTOP_FEATURES_NO_SERVER 4
|
|
||||||
#define GLIBTOP_FEATURES_EXCEPT 8
|
|
||||||
|
|
||||||
#define GLIBTOP_METHOD_DIRECT 1
|
|
||||||
#define GLIBTOP_METHOD_PIPE 2
|
|
||||||
#define GLIBTOP_METHOD_INET 3
|
|
||||||
#define GLIBTOP_METHOD_UNIX 4
|
|
||||||
|
|
||||||
extern void glibtop_open_l __P((glibtop *, const char *, const unsigned long, const unsigned));
|
|
||||||
|
|
||||||
extern void glibtop_open_p __P((glibtop *, const char *, const unsigned long, const unsigned));
|
|
||||||
extern void glibtop_open_s __P((glibtop *, const char *, const unsigned long, const unsigned));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -1,42 +0,0 @@
|
|||||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
This file is part of the Gnome Top Library.
|
|
||||||
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
|
||||||
|
|
||||||
The Gnome Top Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The Gnome Top Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifndef __GLIBTOP_PARAMETER_H__
|
|
||||||
#define __GLIBTOP_PARAMETER_H__
|
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/open.h>
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
#define GLIBTOP_PARAM_METHOD 1
|
|
||||||
#define GLIBTOP_PARAM_FEATURES 2
|
|
||||||
#define GLIBTOP_PARAM_COMMAND 3
|
|
||||||
#define GLIBTOP_PARAM_HOST 4
|
|
||||||
#define GLIBTOP_PARAM_PORT 5
|
|
||||||
|
|
||||||
#define glibtop_get_parameter(p1,p2,p3) glibtop_get_parameter_l(glibtop_global_server,p1,p2,p3)
|
|
||||||
#define glibtop_set_parameter(p1,p2,p3) glibtop_set_parameter_l(glibtop_global_server,p1,p2,p3)
|
|
||||||
|
|
||||||
extern size_t glibtop_get_parameter_l __P((glibtop *, const unsigned, void *, size_t));
|
|
||||||
extern void glibtop_set_parameter_l __P((glibtop *, const unsigned, const void *, size_t));
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@@ -44,8 +44,8 @@ typedef struct _glibtop_proc_kernel glibtop_proc_kernel;
|
|||||||
|
|
||||||
struct _glibtop_proc_kernel
|
struct _glibtop_proc_kernel
|
||||||
{
|
{
|
||||||
u_int64_t flags;
|
unsigned long flags;
|
||||||
u_int64_t k_flags, /* kernel flags for the process */
|
unsigned long k_flags, /* kernel flags for the process */
|
||||||
min_flt, /* number of minor page faults since
|
min_flt, /* number of minor page faults since
|
||||||
* process start */
|
* process start */
|
||||||
maj_flt, /* number of major page faults since
|
maj_flt, /* number of major page faults since
|
||||||
@@ -60,23 +60,11 @@ struct _glibtop_proc_kernel
|
|||||||
* proc is sleeping in */
|
* proc is sleeping in */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_kernel(p1, p2) glibtop_get_proc_kernel_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_kernel(p1, p2) glibtop_get_proc_kernel__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_KERNEL
|
extern void glibtop_get_proc_kernel__r __P((glibtop *, glibtop_proc_kernel *, pid_t));
|
||||||
#define glibtop_get_proc_kernel_r glibtop_get_proc_kernel_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_kernel_r glibtop_get_proc_kernel_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_kernel_l __P((glibtop *, glibtop_proc_kernel *, pid_t));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_KERNEL
|
|
||||||
extern void glibtop_get_proc_kernel_p __P((glibtop *, glibtop_proc_kernel *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_kernel_s __P((glibtop *, glibtop_proc_kernel *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -99,8 +87,8 @@ extern SCM glibtop_guile_descriptions_proc_kernel __P((void));
|
|||||||
|
|
||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
|
extern const char *glibtop_types_proc_kernel [];
|
||||||
extern const char *glibtop_names_proc_kernel [];
|
extern const char *glibtop_names_proc_kernel [];
|
||||||
extern const unsigned glibtop_types_proc_kernel [];
|
|
||||||
extern const char *glibtop_labels_proc_kernel [];
|
extern const char *glibtop_labels_proc_kernel [];
|
||||||
extern const char *glibtop_descriptions_proc_kernel [];
|
extern const char *glibtop_descriptions_proc_kernel [];
|
||||||
|
|
||||||
|
@@ -37,29 +37,17 @@ typedef struct _glibtop_proclist glibtop_proclist;
|
|||||||
|
|
||||||
struct _glibtop_proclist
|
struct _glibtop_proclist
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
number, /* GLIBTOP_PROCLIST_NUMBER */
|
number, /* GLIBTOP_PROCLIST_NUMBER */
|
||||||
total, /* GLIBTOP_PROCLIST_TOTAL */
|
total, /* GLIBTOP_PROCLIST_TOTAL */
|
||||||
size; /* GLIBTOP_PROCLIST_SIZE */
|
size; /* GLIBTOP_PROCLIST_SIZE */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proclist(proclist) glibtop_get_proclist_l(glibtop_global_server, proclist)
|
#define glibtop_get_proclist(proclist) glibtop_get_proclist__r(glibtop_global_server, proclist)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROCLIST
|
extern unsigned *glibtop_get_proclist__r __P((glibtop *, glibtop_proclist *));
|
||||||
#define glibtop_get_proclist_r glibtop_get_proclist_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proclist_r glibtop_get_proclist_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned *glibtop_get_proclist_l __P((glibtop *, glibtop_proclist *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROCLIST
|
|
||||||
extern unsigned *glibtop_get_proclist_p __P((glibtop *, glibtop_proclist *));
|
|
||||||
#else
|
|
||||||
extern unsigned *glibtop_get_proclist_s __P((glibtop *, glibtop_proclist *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -83,7 +71,7 @@ extern SCM glibtop_guile_descriptions_proclist __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_proclist [];
|
extern const char *glibtop_names_proclist [];
|
||||||
extern const unsigned glibtop_types_proclist [];
|
extern const char *glibtop_types_proclist [];
|
||||||
extern const char *glibtop_labels_proclist [];
|
extern const char *glibtop_labels_proclist [];
|
||||||
extern const char *glibtop_descriptions_proclist [];
|
extern const char *glibtop_descriptions_proclist [];
|
||||||
|
|
||||||
|
@@ -42,8 +42,8 @@ typedef struct _glibtop_proc_mem glibtop_proc_mem;
|
|||||||
|
|
||||||
struct _glibtop_proc_mem
|
struct _glibtop_proc_mem
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags;
|
||||||
size, /* total # of pages of memory */
|
long size, /* total # of pages of memory */
|
||||||
vsize, /* number of pages of virtual memory ... */
|
vsize, /* number of pages of virtual memory ... */
|
||||||
resident, /* number of resident set
|
resident, /* number of resident set
|
||||||
* (non-swapped) pages (4k) */
|
* (non-swapped) pages (4k) */
|
||||||
@@ -53,23 +53,11 @@ struct _glibtop_proc_mem
|
|||||||
* of the process; usually 2,147,483,647 */
|
* of the process; usually 2,147,483,647 */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_mem(p1, p2) glibtop_get_proc_mem_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_mem(p1, p2) glibtop_get_proc_mem__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_MEM
|
extern void glibtop_get_proc_mem__r __P((glibtop *, glibtop_proc_mem *, pid_t));
|
||||||
#define glibtop_get_proc_mem_r glibtop_get_proc_mem_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_mem_r glibtop_get_proc_mem_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_mem_l __P((glibtop *, glibtop_proc_mem *, pid_t));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_MEM
|
|
||||||
extern void glibtop_get_proc_mem_p __P((glibtop *, glibtop_proc_mem *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_mem_s __P((glibtop *, glibtop_proc_mem *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -93,7 +81,7 @@ extern SCM glibtop_guile_descriptions_proc_mem __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_proc_mem [];
|
extern const char *glibtop_names_proc_mem [];
|
||||||
extern const unsigned glibtop_types_proc_mem [];
|
extern const char *glibtop_types_proc_mem [];
|
||||||
extern const char *glibtop_labels_proc_mem [];
|
extern const char *glibtop_labels_proc_mem [];
|
||||||
extern const char *glibtop_descriptions_proc_mem [];
|
extern const char *glibtop_descriptions_proc_mem [];
|
||||||
|
|
||||||
|
@@ -43,34 +43,22 @@ typedef struct _glibtop_proc_segment glibtop_proc_segment;
|
|||||||
|
|
||||||
struct _glibtop_proc_segment
|
struct _glibtop_proc_segment
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags;
|
||||||
trs, /* text resident set size */
|
long trs, /* text resident set size */
|
||||||
lrs, /* shared-lib resident set size */
|
lrs, /* shared-lib resident set size */
|
||||||
drs, /* data resident set size */
|
drs, /* data resident set size */
|
||||||
dt, /* dirty pages */
|
dt; /* dirty pages */
|
||||||
start_code,
|
unsigned long start_code,
|
||||||
/* address of beginning of code segment */
|
/* address of beginning of code segment */
|
||||||
end_code, /* address of end of code segment */
|
end_code, /* address of end of code segment */
|
||||||
start_stack; /* address of the bottom of stack segment */
|
start_stack; /* address of the bottom of stack segment */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_segment(p1, p2) glibtop_get_proc_segment_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_segment(p1, p2) glibtop_get_proc_segment__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_SEGMENT
|
extern void glibtop_get_proc_segment__r __P((glibtop *, glibtop_proc_segment *, pid_t));
|
||||||
#define glibtop_get_proc_segment_r glibtop_get_proc_segment_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_segment_r glibtop_get_proc_segment_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_segment_l __P((glibtop *, glibtop_proc_segment *, pid_t));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_SEGMENT
|
|
||||||
extern void glibtop_get_proc_segment_p __P((glibtop *, glibtop_proc_segment *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_segment_s __P((glibtop *, glibtop_proc_segment *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -93,8 +81,8 @@ extern SCM glibtop_guile_descriptions_proc_segment __P((void));
|
|||||||
|
|
||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
|
extern const char *glibtop_types_proc_segment [];
|
||||||
extern const char *glibtop_names_proc_segment [];
|
extern const char *glibtop_names_proc_segment [];
|
||||||
extern const unsigned glibtop_types_proc_segment [];
|
|
||||||
extern const char *glibtop_labels_proc_segment [];
|
extern const char *glibtop_labels_proc_segment [];
|
||||||
extern const char *glibtop_descriptions_proc_segment [];
|
extern const char *glibtop_descriptions_proc_segment [];
|
||||||
|
|
||||||
|
@@ -40,30 +40,18 @@ typedef struct _glibtop_proc_signal glibtop_proc_signal;
|
|||||||
|
|
||||||
struct _glibtop_proc_signal
|
struct _glibtop_proc_signal
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags;
|
||||||
signal, /* mask of pending signals */
|
int signal, /* mask of pending signals */
|
||||||
blocked, /* mask of blocked signals */
|
blocked, /* mask of blocked signals */
|
||||||
sigignore, /* mask of ignored signals */
|
sigignore, /* mask of ignored signals */
|
||||||
sigcatch; /* mask of caught signals */
|
sigcatch; /* mask of caught signals */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_signal(p1, p2) glibtop_get_proc_signal_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_signal(p1, p2) glibtop_get_proc_signal__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_SIGNAL
|
extern void glibtop_get_proc_signal__r __P((glibtop *, glibtop_proc_signal *, pid_t));
|
||||||
#define glibtop_get_proc_signal_r glibtop_get_proc_signal_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_signal_r glibtop_get_proc_signal_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_signal_l __P((glibtop *, glibtop_proc_signal *, pid_t));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_SIGNAL
|
|
||||||
extern void glibtop_get_proc_signal_p __P((glibtop *, glibtop_proc_signal *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_signal_s __P((glibtop *, glibtop_proc_signal *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -87,7 +75,7 @@ extern SCM glibtop_guile_descriptions_proc_signal __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_proc_signal [];
|
extern const char *glibtop_names_proc_signal [];
|
||||||
extern const unsigned glibtop_types_proc_signal [];
|
extern const char *glibtop_types_proc_signal [];
|
||||||
extern const char *glibtop_labels_proc_signal [];
|
extern const char *glibtop_labels_proc_signal [];
|
||||||
extern const char *glibtop_descriptions_proc_signal [];
|
extern const char *glibtop_descriptions_proc_signal [];
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ typedef struct _glibtop_proc_state glibtop_proc_state;
|
|||||||
|
|
||||||
struct _glibtop_proc_state
|
struct _glibtop_proc_state
|
||||||
{
|
{
|
||||||
u_int64_t flags;
|
unsigned long flags;
|
||||||
char cmd[40], /* basename of executable file in
|
char cmd[40], /* basename of executable file in
|
||||||
* call to exec(2) */
|
* call to exec(2) */
|
||||||
state; /* single-char code for process state
|
state; /* single-char code for process state
|
||||||
@@ -54,23 +54,11 @@ struct _glibtop_proc_state
|
|||||||
gid; /* GID of process */
|
gid; /* GID of process */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_state(p1, p2) glibtop_get_proc_state_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_state(p1, p2) glibtop_get_proc_state__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_STATE
|
extern void glibtop_get_proc_state__r __P((glibtop *, glibtop_proc_state *, pid_t));
|
||||||
#define glibtop_get_proc_state_r glibtop_get_proc_state_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_state_r glibtop_get_proc_state_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_state_l __P((glibtop *, glibtop_proc_state *, pid_t));
|
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_STATE
|
|
||||||
extern void glibtop_get_proc_state_p __P((glibtop *, glibtop_proc_state *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_state_s __P((glibtop *, glibtop_proc_state *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -94,7 +82,7 @@ extern SCM glibtop_guile_descriptions_proc_state __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_proc_state [];
|
extern const char *glibtop_names_proc_state [];
|
||||||
extern const unsigned glibtop_types_proc_state [];
|
extern const char *glibtop_types_proc_state [];
|
||||||
extern const char *glibtop_labels_proc_state [];
|
extern const char *glibtop_labels_proc_state [];
|
||||||
extern const char *glibtop_descriptions_proc_state [];
|
extern const char *glibtop_descriptions_proc_state [];
|
||||||
|
|
||||||
|
@@ -43,8 +43,8 @@ typedef struct _glibtop_proc_time glibtop_proc_time;
|
|||||||
|
|
||||||
struct _glibtop_proc_time
|
struct _glibtop_proc_time
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags;
|
||||||
start_time, /* start time of process --
|
long start_time, /* start time of process --
|
||||||
* seconds since 1-1-70 */
|
* seconds since 1-1-70 */
|
||||||
utime, /* user-mode CPU time accumulated by process */
|
utime, /* user-mode CPU time accumulated by process */
|
||||||
stime, /* kernel-mode CPU time accumulated by process */
|
stime, /* kernel-mode CPU time accumulated by process */
|
||||||
@@ -59,23 +59,11 @@ struct _glibtop_proc_time
|
|||||||
* due to an interval timer. */
|
* due to an interval timer. */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_time(p1, p2) glibtop_get_proc_time_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_time(p1, p2) glibtop_get_proc_time__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_TIME
|
extern void glibtop_get_proc_time__r __P((glibtop *, glibtop_proc_time *, pid_t));
|
||||||
#define glibtop_get_proc_time_r glibtop_get_proc_time_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_time_r glibtop_get_proc_time_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_time_l __P((glibtop *, glibtop_proc_time *, pid_t));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_TIME
|
|
||||||
extern void glibtop_get_proc_time_p __P((glibtop *, glibtop_proc_time *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_time_s __P((glibtop *, glibtop_proc_time *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -99,7 +87,7 @@ extern SCM glibtop_guile_descriptions_proc_time __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_proc_time [];
|
extern const char *glibtop_names_proc_time [];
|
||||||
extern const unsigned glibtop_types_proc_time [];
|
extern const char *glibtop_types_proc_time [];
|
||||||
extern const char *glibtop_labels_proc_time [];
|
extern const char *glibtop_labels_proc_time [];
|
||||||
extern const char *glibtop_descriptions_proc_time [];
|
extern const char *glibtop_descriptions_proc_time [];
|
||||||
|
|
||||||
|
@@ -48,7 +48,7 @@ typedef struct _glibtop_proc_uid glibtop_proc_uid;
|
|||||||
|
|
||||||
struct _glibtop_proc_uid
|
struct _glibtop_proc_uid
|
||||||
{
|
{
|
||||||
u_int64_t flags;
|
unsigned long flags;
|
||||||
int uid, /* user id */
|
int uid, /* user id */
|
||||||
euid, /* effective user id */
|
euid, /* effective user id */
|
||||||
gid, /* group id */
|
gid, /* group id */
|
||||||
@@ -63,23 +63,11 @@ struct _glibtop_proc_uid
|
|||||||
nice; /* standard unix nice level of process */
|
nice; /* standard unix nice level of process */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_proc_uid(p1, p2) glibtop_get_proc_uid_l(glibtop_global_server, p1, p2)
|
#define glibtop_get_proc_uid(p1, p2) glibtop_get_proc_uid__r(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_UID
|
extern void glibtop_get_proc_uid__r __P((glibtop *, glibtop_proc_uid *, pid_t));
|
||||||
#define glibtop_get_proc_uid_r glibtop_get_proc_uid_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_proc_uid_r glibtop_get_proc_uid_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_proc_uid_l __P((glibtop *, glibtop_proc_uid *, pid_t));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_PROC_UID
|
|
||||||
extern void glibtop_get_proc_uid_p __P((glibtop *, glibtop_proc_uid *, pid_t));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_proc_uid_s __P((glibtop *, glibtop_proc_uid *, pid_t));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -103,7 +91,7 @@ extern SCM glibtop_guile_descriptions_proc_uid __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_proc_uid [];
|
extern const char *glibtop_names_proc_uid [];
|
||||||
extern const unsigned glibtop_types_proc_uid [];
|
extern const char *glibtop_types_proc_uid [];
|
||||||
extern const char *glibtop_labels_proc_uid [];
|
extern const char *glibtop_labels_proc_uid [];
|
||||||
extern const char *glibtop_descriptions_proc_uid [];
|
extern const char *glibtop_descriptions_proc_uid [];
|
||||||
|
|
||||||
|
@@ -29,8 +29,7 @@ __BEGIN_DECLS
|
|||||||
|
|
||||||
#define glibtop_read(p1, p2) glibtop_read(glibtop_global_server, p1, p2)
|
#define glibtop_read(p1, p2) glibtop_read(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
extern void glibtop_read_l __P((glibtop *, size_t, void *));
|
extern void glibtop_read__r __P((glibtop *, size_t, void *));
|
||||||
extern void glibtop_read_s __P((glibtop *, size_t, void *));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -27,10 +27,9 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
#define glibtop_read_data() glibtop_read_data_r(glibtop_global_server)
|
#define glibtop_read_data() glibtop_read_data__r(glibtop_global_server)
|
||||||
|
|
||||||
extern void *glibtop_read_data_l __P((glibtop *));
|
extern void *glibtop_read_data__r __P((glibtop *));
|
||||||
extern void *glibtop_read_data_s __P((glibtop *));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -44,7 +44,7 @@ typedef struct _glibtop_sem_limits glibtop_sem_limits;
|
|||||||
|
|
||||||
struct _glibtop_sem_limits
|
struct _glibtop_sem_limits
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
semmap, /* GLIBTOP_IPC_SEMMAP */
|
semmap, /* GLIBTOP_IPC_SEMMAP */
|
||||||
semmni, /* GLIBTOP_IPC_SEMMNI */
|
semmni, /* GLIBTOP_IPC_SEMMNI */
|
||||||
semmns, /* GLIBTOP_IPC_SEMMNS */
|
semmns, /* GLIBTOP_IPC_SEMMNS */
|
||||||
@@ -57,23 +57,11 @@ struct _glibtop_sem_limits
|
|||||||
semaem; /* GLIBTOP_IPC_SEMAEM */
|
semaem; /* GLIBTOP_IPC_SEMAEM */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_sem_limits(sem) glibtop_get_sem_limits_l(glibtop_global_server, sem)
|
#define glibtop_get_sem_limits(sem) glibtop_get_sem_limits__r(glibtop_global_server, sem)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_SEM_LIMITS
|
extern void glibtop_get_sem_limits__r __P((glibtop *, glibtop_sem_limits *));
|
||||||
#define glibtop_get_sem_limits_r glibtop_get_sem_limits_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_sem_limits_r glibtop_get_sem_limits_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_sem_limits_l __P((glibtop *, glibtop_sem_limits *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_SEM_LIMITS
|
|
||||||
extern void glibtop_get_sem_limits_p __P((glibtop *, glibtop_sem_limits *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_sem_limits_s __P((glibtop *, glibtop_sem_limits *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -97,7 +85,7 @@ extern SCM glibtop_guile_descriptions_sem_limits __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_sem_limits [];
|
extern const char *glibtop_names_sem_limits [];
|
||||||
extern const unsigned glibtop_types_sem_limits [];
|
extern const char *glibtop_types_sem_limits [];
|
||||||
extern const char *glibtop_labels_sem_limits [];
|
extern const char *glibtop_labels_sem_limits [];
|
||||||
extern const char *glibtop_descriptions_sem_limits [];
|
extern const char *glibtop_descriptions_sem_limits [];
|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@ typedef struct _glibtop_shm_limits glibtop_shm_limits;
|
|||||||
|
|
||||||
struct _glibtop_shm_limits
|
struct _glibtop_shm_limits
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
shmmax, /* GLIBTOP_IPC_SHMMAX */
|
shmmax, /* GLIBTOP_IPC_SHMMAX */
|
||||||
shmmin, /* GLIBTOP_IPC_SHMMIN */
|
shmmin, /* GLIBTOP_IPC_SHMMIN */
|
||||||
shmmni, /* GLIBTOP_IPC_SHMMNI */
|
shmmni, /* GLIBTOP_IPC_SHMMNI */
|
||||||
@@ -47,23 +47,11 @@ struct _glibtop_shm_limits
|
|||||||
shmall; /* GLIBTOP_IPC_SHMALL */
|
shmall; /* GLIBTOP_IPC_SHMALL */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_shm_limits(shm) glibtop_get_shm_limits_l(glibtop_global_server, shm)
|
#define glibtop_get_shm_limits(shm) glibtop_get_shm_limits__r(glibtop_global_server, shm)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_SHM_LIMITS
|
extern void glibtop_get_shm_limits__r __P((glibtop *, glibtop_shm_limits *));
|
||||||
#define glibtop_get_shm_limits_r glibtop_get_shm_limits_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_shm_limits_r glibtop_get_shm_limits_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_shm_limits_l __P((glibtop *, glibtop_shm_limits *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_SHM_LIMITS
|
|
||||||
extern void glibtop_get_shm_limits_p __P((glibtop *, glibtop_shm_limits *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_shm_limits_s __P((glibtop *, glibtop_shm_limits *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -87,7 +75,7 @@ extern SCM glibtop_guile_descriptions_shm_limits __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_shm_limits [];
|
extern const char *glibtop_names_shm_limits [];
|
||||||
extern const unsigned glibtop_types_shm_limits [];
|
extern const char *glibtop_types_shm_limits [];
|
||||||
extern const char *glibtop_labels_shm_limits [];
|
extern const char *glibtop_labels_shm_limits [];
|
||||||
extern const char *glibtop_descriptions_shm_limits [];
|
extern const char *glibtop_descriptions_shm_limits [];
|
||||||
|
|
||||||
|
@@ -30,40 +30,24 @@ __BEGIN_DECLS
|
|||||||
#define GLIBTOP_SWAP_TOTAL 0
|
#define GLIBTOP_SWAP_TOTAL 0
|
||||||
#define GLIBTOP_SWAP_USED 1
|
#define GLIBTOP_SWAP_USED 1
|
||||||
#define GLIBTOP_SWAP_FREE 2
|
#define GLIBTOP_SWAP_FREE 2
|
||||||
#define GLIBTOP_SWAP_PAGEIN 3
|
|
||||||
#define GLIBTOP_SWAP_PAGEOUT 4
|
|
||||||
|
|
||||||
#define GLIBTOP_MAX_SWAP 5
|
#define GLIBTOP_MAX_SWAP 3
|
||||||
|
|
||||||
typedef struct _glibtop_swap glibtop_swap;
|
typedef struct _glibtop_swap glibtop_swap;
|
||||||
|
|
||||||
struct _glibtop_swap
|
struct _glibtop_swap
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
total, /* GLIBTOP_SWAP_TOTAL */
|
total, /* GLIBTOP_SWAP_TOTAL */
|
||||||
used, /* GLIBTOP_SWAP_USED */
|
used, /* GLIBTOP_SWAP_USED */
|
||||||
free, /* GLIBTOP_SWAP_FREE */
|
free; /* GLIBTOP_SWAP_FREE */
|
||||||
pagein, /* GLIBTOP_SWAP_PAGEIN */
|
|
||||||
pageout; /* GLIBTOP_SWAP_PAGEOUT */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_swap(swap) glibtop_get_swap_l(glibtop_global_server, swap)
|
#define glibtop_get_swap(swap) glibtop_get_swap__r(glibtop_global_server, swap)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_SWAP
|
extern void glibtop_get_swap__r __P((glibtop *, glibtop_swap *));
|
||||||
#define glibtop_get_swap_r glibtop_get_swap_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_swap_r glibtop_get_swap_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_swap_l __P((glibtop *, glibtop_swap *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_SWAP
|
|
||||||
extern void glibtop_get_swap_p __P((glibtop *, glibtop_swap *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_swap_s __P((glibtop *, glibtop_swap *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -87,7 +71,7 @@ extern SCM glibtop_guile_descriptions_swap __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_swap [];
|
extern const char *glibtop_names_swap [];
|
||||||
extern const unsigned glibtop_types_swap [];
|
extern const char *glibtop_types_swap [];
|
||||||
extern const char *glibtop_labels_swap [];
|
extern const char *glibtop_labels_swap [];
|
||||||
extern const char *glibtop_descriptions_swap [];
|
extern const char *glibtop_descriptions_swap [];
|
||||||
|
|
||||||
|
@@ -27,36 +27,30 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
#define GLIBTOP_SYSDEPS_FEATURES 0
|
#define GLIBTOP_SYSDEPS_CPU 0
|
||||||
#define GLIBTOP_SYSDEPS_CPU 1
|
#define GLIBTOP_SYSDEPS_MEM 1
|
||||||
#define GLIBTOP_SYSDEPS_MEM 2
|
#define GLIBTOP_SYSDEPS_SWAP 2
|
||||||
#define GLIBTOP_SYSDEPS_SWAP 3
|
#define GLIBTOP_SYSDEPS_UPTIME 3
|
||||||
#define GLIBTOP_SYSDEPS_UPTIME 4
|
#define GLIBTOP_SYSDEPS_LOADAVG 4
|
||||||
#define GLIBTOP_SYSDEPS_LOADAVG 5
|
#define GLIBTOP_SYSDEPS_SHM_LIMITS 5
|
||||||
#define GLIBTOP_SYSDEPS_SHM_LIMITS 6
|
#define GLIBTOP_SYSDEPS_MSG_LIMITS 6
|
||||||
#define GLIBTOP_SYSDEPS_MSG_LIMITS 7
|
#define GLIBTOP_SYSDEPS_SEM_LIMITS 7
|
||||||
#define GLIBTOP_SYSDEPS_SEM_LIMITS 8
|
#define GLIBTOP_SYSDEPS_PROCLIST 8
|
||||||
#define GLIBTOP_SYSDEPS_PROCLIST 9
|
#define GLIBTOP_SYSDEPS_PROC_STATE 9
|
||||||
#define GLIBTOP_SYSDEPS_PROC_STATE 10
|
#define GLIBTOP_SYSDEPS_PROC_UID 10
|
||||||
#define GLIBTOP_SYSDEPS_PROC_UID 11
|
#define GLIBTOP_SYSDEPS_PROC_MEM 11
|
||||||
#define GLIBTOP_SYSDEPS_PROC_MEM 12
|
#define GLIBTOP_SYSDEPS_PROC_TIME 12
|
||||||
#define GLIBTOP_SYSDEPS_PROC_TIME 13
|
#define GLIBTOP_SYSDEPS_PROC_SIGNAL 13
|
||||||
#define GLIBTOP_SYSDEPS_PROC_SIGNAL 14
|
#define GLIBTOP_SYSDEPS_PROC_KERNEL 14
|
||||||
#define GLIBTOP_SYSDEPS_PROC_KERNEL 15
|
#define GLIBTOP_SYSDEPS_PROC_SEGMENT 15
|
||||||
#define GLIBTOP_SYSDEPS_PROC_SEGMENT 16
|
|
||||||
#define GLIBTOP_SYSDEPS_MOUNTLIST 17
|
|
||||||
#define GLIBTOP_SYSDEPS_FSUSAGE 18
|
|
||||||
|
|
||||||
#define GLIBTOP_MAX_SYSDEPS 19
|
#define GLIBTOP_MAX_SYSDEPS 16
|
||||||
|
|
||||||
#define GLIBTOP_SYSDEPS_ALL ((1 << GLIBTOP_MAX_SYSDEPS) - 1)
|
|
||||||
|
|
||||||
typedef struct _glibtop_sysdeps glibtop_sysdeps;
|
typedef struct _glibtop_sysdeps glibtop_sysdeps;
|
||||||
|
|
||||||
struct _glibtop_sysdeps
|
struct _glibtop_sysdeps
|
||||||
{
|
{
|
||||||
u_int64_t flags,
|
unsigned long flags,
|
||||||
features, /* server features */
|
|
||||||
cpu, /* glibtop_cpu */
|
cpu, /* glibtop_cpu */
|
||||||
mem, /* glibtop_mem */
|
mem, /* glibtop_mem */
|
||||||
swap, /* glibtop_swap */
|
swap, /* glibtop_swap */
|
||||||
@@ -72,16 +66,14 @@ struct _glibtop_sysdeps
|
|||||||
proc_time, /* glibtop_proc_time */
|
proc_time, /* glibtop_proc_time */
|
||||||
proc_signal, /* glibtop_proc_signal */
|
proc_signal, /* glibtop_proc_signal */
|
||||||
proc_kernel, /* glibtop_proc_kernel */
|
proc_kernel, /* glibtop_proc_kernel */
|
||||||
proc_segment, /* glibtop_proc_segment */
|
proc_segment; /* glibtop_proc_segment */
|
||||||
mountlist, /* glibtop_mountlist */
|
|
||||||
fsusage; /* glibtop_fsusage */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_sysdeps(sysdeps) glibtop_get_sysdeps_r(glibtop_global_server,sysdeps)
|
#define glibtop_get_sysdeps(sysdeps) glibtop_get_sysdeps__r(glibtop_global_server,sysdeps)
|
||||||
|
|
||||||
extern void glibtop_get_sysdeps_r __P((glibtop *, glibtop_sysdeps *));
|
extern void glibtop_get_sysdeps__r __P((glibtop *, glibtop_sysdeps *));
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -105,7 +97,7 @@ extern SCM glibtop_guile_descriptions_sysdeps __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_sysdeps [];
|
extern const char *glibtop_names_sysdeps [];
|
||||||
extern const unsigned glibtop_types_sysdeps [];
|
extern const char *glibtop_types_sysdeps [];
|
||||||
extern const char *glibtop_labels_sysdeps [];
|
extern const char *glibtop_labels_sysdeps [];
|
||||||
extern const char *glibtop_descriptions_sysdeps [];
|
extern const char *glibtop_descriptions_sysdeps [];
|
||||||
|
|
||||||
|
@@ -1,36 +0,0 @@
|
|||||||
/* $Id$ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
This file is part of the Gnome Top Library.
|
|
||||||
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
|
||||||
|
|
||||||
The Gnome Top Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The Gnome Top Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#ifndef __GLIBTOP_TYPES_H__
|
|
||||||
#define __GLIBTOP_TYPES_H__
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
|
||||||
|
|
||||||
#define GLIBTOP_TYPE_LONG 1
|
|
||||||
#define GLIBTOP_TYPE_ULONG 2
|
|
||||||
#define GLIBTOP_TYPE_DOUBLE 3
|
|
||||||
#define GLIBTOP_TYPE_INT 4
|
|
||||||
#define GLIBTOP_TYPE_CHAR 5
|
|
||||||
#define GLIBTOP_TYPE_STRING 6
|
|
||||||
|
|
||||||
__END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@@ -40,9 +40,6 @@
|
|||||||
#include <glibtop/prockernel.h>
|
#include <glibtop/prockernel.h>
|
||||||
#include <glibtop/procsegment.h>
|
#include <glibtop/procsegment.h>
|
||||||
|
|
||||||
#include <glibtop/mountlist.h>
|
|
||||||
#include <glibtop/fsusage.h>
|
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
typedef union _glibtop_union glibtop_union;
|
typedef union _glibtop_union glibtop_union;
|
||||||
@@ -65,8 +62,6 @@ union _glibtop_union
|
|||||||
glibtop_proc_signal proc_signal;
|
glibtop_proc_signal proc_signal;
|
||||||
glibtop_proc_kernel proc_kernel;
|
glibtop_proc_kernel proc_kernel;
|
||||||
glibtop_proc_segment proc_segment;
|
glibtop_proc_segment proc_segment;
|
||||||
glibtop_mountlist mountlist;
|
|
||||||
glibtop_fsusage fsusage;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
@@ -36,28 +36,16 @@ typedef struct _glibtop_uptime glibtop_uptime;
|
|||||||
|
|
||||||
struct _glibtop_uptime
|
struct _glibtop_uptime
|
||||||
{
|
{
|
||||||
u_int64_t flags;
|
unsigned long flags;
|
||||||
double uptime, /* GLIBTOP_UPTIME_UPTIME */
|
double uptime, /* GLIBTOP_UPTIME_UPTIME */
|
||||||
idletime; /* GLIBTOP_UPTIME_IDLETIME */
|
idletime; /* GLIBTOP_UPTIME_IDLETIME */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define glibtop_get_uptime(uptime) glibtop_get_uptime_l(glibtop_global_server, uptime)
|
#define glibtop_get_uptime(uptime) glibtop_get_uptime__r(glibtop_global_server, uptime)
|
||||||
|
|
||||||
#if GLIBTOP_SUID_UPTIME
|
extern void glibtop_get_uptime__r __P((glibtop *, glibtop_uptime *));
|
||||||
#define glibtop_get_uptime_r glibtop_get_uptime_p
|
|
||||||
#else
|
|
||||||
#define glibtop_get_uptime_r glibtop_get_uptime_s
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern void glibtop_get_uptime_l __P((glibtop *, glibtop_uptime *));
|
#ifdef HAVE_GUILE
|
||||||
|
|
||||||
#if GLIBTOP_SUID_UPTIME
|
|
||||||
extern void glibtop_get_uptime_p __P((glibtop *, glibtop_uptime *));
|
|
||||||
#else
|
|
||||||
extern void glibtop_get_uptime_s __P((glibtop *, glibtop_uptime *));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GLIBTOP_GUILE
|
|
||||||
|
|
||||||
/* You need to link with -lgtop_guile to get this stuff here. */
|
/* You need to link with -lgtop_guile to get this stuff here. */
|
||||||
|
|
||||||
@@ -81,7 +69,7 @@ extern SCM glibtop_guile_descriptions_uptime __P((void));
|
|||||||
/* You need to link with -lgtop_names to get this stuff here. */
|
/* You need to link with -lgtop_names to get this stuff here. */
|
||||||
|
|
||||||
extern const char *glibtop_names_uptime [];
|
extern const char *glibtop_names_uptime [];
|
||||||
extern const unsigned glibtop_types_uptime [];
|
extern const char *glibtop_types_uptime [];
|
||||||
extern const char *glibtop_labels_uptime [];
|
extern const char *glibtop_labels_uptime [];
|
||||||
extern const char *glibtop_descriptions_uptime [];
|
extern const char *glibtop_descriptions_uptime [];
|
||||||
|
|
||||||
|
@@ -29,8 +29,7 @@ __BEGIN_DECLS
|
|||||||
|
|
||||||
#define glibtop_write(p1, p2) glibtop_write(glibtop_global_server, p1, p2)
|
#define glibtop_write(p1, p2) glibtop_write(glibtop_global_server, p1, p2)
|
||||||
|
|
||||||
extern void glibtop_write_l __P((glibtop *, size_t, void *));
|
extern void glibtop_write__r __P((glibtop *, size_t, void *));
|
||||||
extern void glibtop_write_s __P((glibtop *, size_t, void *));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -27,17 +27,15 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
#define glibtop_malloc(p1) glibtop_malloc_r(glibtop_global_server, p1)
|
#define glibtop_malloc(p1) glibtop_malloc__r(glibtop_global_server, p1)
|
||||||
#define glibtop_calloc(p1, p2) glibtop_calloc_r(glibtop_global_server, p1, p2)
|
#define glibtop_calloc(p1, p2) glibtop_calloc__r(glibtop_global_server, p1, p2)
|
||||||
#define glibtop_realloc(p1, p2) glibtop_realloc_r(glibtop_global_server, p1, p2)
|
#define glibtop_realloc(p1, p2) glibtop_realloc__r(glibtop_global_server, p1, p2)
|
||||||
#define glibtop_strdup(p2) glibtop_strdup_r(glibtop_global_server, p1)
|
#define glibtop_free(p1) glibtop_free__r(glibtop_global_server, p1)
|
||||||
#define glibtop_free(p1) glibtop_free_r(glibtop_global_server, p1)
|
|
||||||
|
|
||||||
extern void *glibtop_malloc_r __P((glibtop *, size_t));
|
extern void *glibtop_malloc__r __P((glibtop *, size_t));
|
||||||
extern void *glibtop_calloc_r __P((glibtop *, size_t, size_t));
|
extern void *glibtop_calloc__r __P((glibtop *, size_t, size_t));
|
||||||
extern void *glibtop_realloc_r __P((glibtop *, void *, size_t));
|
extern void *glibtop_realloc__r __P((glibtop *, void *, size_t));
|
||||||
extern char *glibtop_strdup_r __P((glibtop *, const char *));
|
extern void glibtop_free__r __P((glibtop *, void *));
|
||||||
extern void glibtop_free_r __P((glibtop *, void *));
|
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@@ -1,14 +0,0 @@
|
|||||||
1998-07-21 Martin Baulig <martin@home-of-linux.org>
|
|
||||||
|
|
||||||
* table20: New directory for 2.0.xx kernels.
|
|
||||||
|
|
||||||
* table21: New directory for 2.1.xx kernels.
|
|
||||||
|
|
||||||
* *: Moved into `table20' and `table21'.
|
|
||||||
|
|
||||||
1998-06-14 Martin Baulig <baulig@taurus.uni-trier.de>
|
|
||||||
|
|
||||||
* README: Added README.
|
|
||||||
|
|
||||||
* kernel.patch: Patch for the Linux kernel to add the
|
|
||||||
new system call.
|
|
168
kernel/table.h
168
kernel/table.h
@@ -1,168 +0,0 @@
|
|||||||
#ifndef _LINUX_TABLE_H
|
|
||||||
#define _LINUX_TABLE_H
|
|
||||||
|
|
||||||
#ifdef _KERNEL
|
|
||||||
#include <linux/types.h>
|
|
||||||
#else
|
|
||||||
#define NR_TASKS 512
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TABLE_VERSION 0
|
|
||||||
#define TABLE_CPU 1
|
|
||||||
#define TABLE_MEM 2
|
|
||||||
#define TABLE_SWAP 3
|
|
||||||
#define TABLE_LOADAVG 4
|
|
||||||
#define TABLE_UPTIME 5
|
|
||||||
#define TABLE_PROCLIST 6
|
|
||||||
#define TABLE_PROC_UID 7
|
|
||||||
#define TABLE_PROC_MEM 8
|
|
||||||
#define TABLE_PROC_SEGMENT 9
|
|
||||||
#define TABLE_PROC_TIME 10
|
|
||||||
#define TABLE_PROC_STATE 11
|
|
||||||
#define TABLE_PROC_SIGNAL 12
|
|
||||||
#define TABLE_PROC_KERNEL 13
|
|
||||||
|
|
||||||
/* CPU Usage (in jiffies = 1/100th seconds) */
|
|
||||||
|
|
||||||
struct table_cpu
|
|
||||||
{
|
|
||||||
unsigned long total; /* Total CPU Time */
|
|
||||||
unsigned long user; /* CPU Time in User Mode */
|
|
||||||
unsigned long nice; /* CPU Time in User Mode (nice) */
|
|
||||||
unsigned long sys; /* CPU Time in System Mode */
|
|
||||||
unsigned long idle; /* CPU Time in the Idle Task */
|
|
||||||
unsigned long frequency; /* Tick frequency */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Memory Usage (in bytes) */
|
|
||||||
|
|
||||||
struct table_mem
|
|
||||||
{
|
|
||||||
unsigned long total; /* Total physical memory */
|
|
||||||
unsigned long used; /* Used memory size */
|
|
||||||
unsigned long free; /* Free memory size */
|
|
||||||
unsigned long shared; /* Shared memory size */
|
|
||||||
unsigned long buffer; /* Size of buffers */
|
|
||||||
unsigned long cached; /* Size of cached memory */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Swap Space (in bytes) */
|
|
||||||
|
|
||||||
struct table_swap
|
|
||||||
{
|
|
||||||
unsigned long total; /* Total swap space */
|
|
||||||
unsigned long used; /* Used swap space */
|
|
||||||
unsigned long free; /* Free swap space */
|
|
||||||
unsigned long pagein; /* Total # of pages swapped in */
|
|
||||||
unsigned long pageout; /* Total # of pages swapped out */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Load average */
|
|
||||||
|
|
||||||
struct table_loadavg
|
|
||||||
{
|
|
||||||
double loadavg [3];
|
|
||||||
unsigned nr_running;
|
|
||||||
unsigned nr_tasks;
|
|
||||||
unsigned last_pid;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Uptime */
|
|
||||||
|
|
||||||
struct table_uptime
|
|
||||||
{
|
|
||||||
unsigned long uptime;
|
|
||||||
unsigned long idle;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Process list. */
|
|
||||||
|
|
||||||
struct table_proclist
|
|
||||||
{
|
|
||||||
int nr_running, nr_tasks, last_pid;
|
|
||||||
unsigned pids [NR_TASKS];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Information about processes. */
|
|
||||||
|
|
||||||
struct table_proc_state
|
|
||||||
{
|
|
||||||
long state;
|
|
||||||
unsigned long flags;
|
|
||||||
char comm[16];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct table_proc_uid
|
|
||||||
{
|
|
||||||
int uid, euid, suid, fsuid;
|
|
||||||
int gid, egid, sgid, fsgid;
|
|
||||||
int pid, pgrp, ppid;
|
|
||||||
int session;
|
|
||||||
unsigned int tty;
|
|
||||||
int tpgid;
|
|
||||||
long priority;
|
|
||||||
long counter;
|
|
||||||
long def_priority;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct table_proc_mem
|
|
||||||
{
|
|
||||||
unsigned long context;
|
|
||||||
unsigned long start_code, end_code, start_data, end_data;
|
|
||||||
unsigned long start_brk, brk, start_stack, start_mmap;
|
|
||||||
unsigned long arg_start, arg_end, env_start, env_end;
|
|
||||||
unsigned long rss, rlim, total_vm, locked_vm;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct table_proc_segment
|
|
||||||
{
|
|
||||||
unsigned long vsize;
|
|
||||||
int size, resident, shared;
|
|
||||||
int trs, lrs, drs, dt;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct table_proc_time
|
|
||||||
{
|
|
||||||
long utime, stime, cutime, cstime, start_time;
|
|
||||||
unsigned long timeout, policy, rt_priority;
|
|
||||||
unsigned long it_real_value, it_prof_value, it_virt_value;
|
|
||||||
unsigned long it_real_incr, it_prof_incr, it_virt_incr;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct table_proc_signal
|
|
||||||
{
|
|
||||||
unsigned long long signal,
|
|
||||||
blocked, /* bitmap of masked signals */
|
|
||||||
ignored, /* mask of ignored signals */
|
|
||||||
caught; /* mask of caught signals */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct table_proc_kernel
|
|
||||||
{
|
|
||||||
unsigned long keip, kesp, wchan;
|
|
||||||
unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
|
|
||||||
unsigned long nswap, cnswap;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Union */
|
|
||||||
|
|
||||||
union table
|
|
||||||
{
|
|
||||||
struct table_cpu cpu;
|
|
||||||
struct table_mem mem;
|
|
||||||
struct table_swap swap;
|
|
||||||
struct table_loadavg loadavg;
|
|
||||||
struct table_uptime uptime;
|
|
||||||
struct table_proclist proclist;
|
|
||||||
struct table_proc_uid proc_uid;
|
|
||||||
struct table_proc_mem proc_mem;
|
|
||||||
struct table_proc_segment proc_segment;
|
|
||||||
struct table_proc_time proc_time;
|
|
||||||
struct table_proc_state proc_state;
|
|
||||||
struct table_proc_signal proc_signal;
|
|
||||||
struct table_proc_kernel proc_kernel;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _LINUX_IPC_H */
|
|
||||||
|
|
||||||
|
|
@@ -1,13 +0,0 @@
|
|||||||
#
|
|
||||||
# Makefile for the linux system information tables.
|
|
||||||
#
|
|
||||||
# Note! Dependencies are done automagically by 'make dep', which also
|
|
||||||
# removes any old dependencies. DON'T put your own dependencies here
|
|
||||||
# unless it's something special (ie not a .c file).
|
|
||||||
#
|
|
||||||
# Note 2! The CFLAGS definition is now in the main makefile...
|
|
||||||
|
|
||||||
O_TARGET := table.o
|
|
||||||
O_OBJS := main.o
|
|
||||||
|
|
||||||
include $(TOPDIR)/Rules.make
|
|
@@ -1,21 +0,0 @@
|
|||||||
This is a new system call `table ()' for the Linux table. It is faster
|
|
||||||
than reading from /proc and can be used to fetch all information required
|
|
||||||
for libgtop until whe have some other function (extended sysctl, ...) in
|
|
||||||
standard kernels.
|
|
||||||
|
|
||||||
I didn't want to change sysctl or some other function myself cause this may
|
|
||||||
cause other applications relying upon those function to fail. This is
|
|
||||||
something for the ``real'' kernel gurus ...
|
|
||||||
|
|
||||||
To use this new system call for libgtop, do the following:
|
|
||||||
|
|
||||||
* Copy this directory to /usr/src/linux/table
|
|
||||||
* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h
|
|
||||||
* Apply the patch `kernel.patch' to the kernel, compile, install and reboot
|
|
||||||
* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again).
|
|
||||||
|
|
||||||
If you want to change and/or add something - feel free to do so !
|
|
||||||
|
|
||||||
Have fun,
|
|
||||||
|
|
||||||
Martin
|
|
@@ -1,51 +0,0 @@
|
|||||||
diff -ur linux-2.0.32/Makefile linux-hacked/Makefile
|
|
||||||
--- linux-2.0.32/Makefile Fri Nov 7 19:51:05 1997
|
|
||||||
+++ linux-hacked/Makefile Thu Jun 11 20:41:12 1998
|
|
||||||
@@ -87,7 +87,7 @@
|
|
||||||
# standard CFLAGS
|
|
||||||
#
|
|
||||||
|
|
||||||
-CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce
|
|
||||||
+CFLAGS = -Wall -Wstrict-prototypes -g -O2 -fomit-frame-pointer -fno-strength-reduce
|
|
||||||
|
|
||||||
ifdef CONFIG_CPP
|
|
||||||
CFLAGS := $(CFLAGS) -x c++
|
|
||||||
@@ -113,12 +113,12 @@
|
|
||||||
# Include the make variables (CC, etc...)
|
|
||||||
#
|
|
||||||
|
|
||||||
-ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a
|
|
||||||
+ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a table/table.o
|
|
||||||
FILESYSTEMS =fs/filesystems.a
|
|
||||||
DRIVERS =drivers/block/block.a \
|
|
||||||
drivers/char/char.a
|
|
||||||
LIBS =$(TOPDIR)/lib/lib.a
|
|
||||||
-SUBDIRS =kernel drivers mm fs net ipc lib
|
|
||||||
+SUBDIRS =kernel drivers mm fs net ipc lib table
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_ISDN),y)
|
|
||||||
DRIVERS := $(DRIVERS) drivers/isdn/isdn.a
|
|
||||||
diff -ur linux-2.0.32/arch/i386/kernel/entry.S linux-hacked/arch/i386/kernel/entry.S
|
|
||||||
--- linux-2.0.32/arch/i386/kernel/entry.S Tue Sep 16 23:42:45 1997
|
|
||||||
+++ linux-hacked/arch/i386/kernel/entry.S Thu Jun 11 21:37:20 1998
|
|
||||||
@@ -699,4 +699,8 @@
|
|
||||||
.long SYMBOL_NAME(sys_mremap)
|
|
||||||
.long 0,0
|
|
||||||
.long SYMBOL_NAME(sys_vm86)
|
|
||||||
- .space (NR_syscalls-166)*4
|
|
||||||
+ .long 0,0,0,0 /* 170 */
|
|
||||||
+ .long 0,0,0,0,0,0,0,0,0,0 /* 180 */
|
|
||||||
+ .long 0,0,0,0,0,0,0
|
|
||||||
+ .long SYMBOL_NAME(sys_table)
|
|
||||||
+ .space (NR_syscalls-188)*4
|
|
||||||
diff -ur linux-2.0.32/include/asm-i386/unistd.h linux-hacked/include/asm-i386/unistd.h
|
|
||||||
--- linux-2.0.32/include/asm-i386/unistd.h Fri Mar 22 07:34:02 1996
|
|
||||||
+++ linux-hacked/include/asm-i386/unistd.h Thu Jun 11 21:37:03 1998
|
|
||||||
@@ -169,6 +169,7 @@
|
|
||||||
#define __NR_sched_rr_get_interval 161
|
|
||||||
#define __NR_nanosleep 162
|
|
||||||
#define __NR_mremap 163
|
|
||||||
+#define __NR_table 188
|
|
||||||
|
|
||||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
|
|
||||||
#define _syscall0(type,name) \
|
|
@@ -1,439 +0,0 @@
|
|||||||
/*
|
|
||||||
* linux/table/table_impl.c
|
|
||||||
* Copyright (C) 1998 Martin Baulig
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/kernel_stat.h>
|
|
||||||
#include <linux/tty.h>
|
|
||||||
#include <linux/user.h>
|
|
||||||
#include <linux/a.out.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
#include <linux/mman.h>
|
|
||||||
#include <linux/proc_fs.h>
|
|
||||||
#include <linux/ioport.h>
|
|
||||||
#include <linux/config.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
#include <linux/pagemap.h>
|
|
||||||
#include <linux/swap.h>
|
|
||||||
|
|
||||||
#include <asm/segment.h>
|
|
||||||
#include <asm/pgtable.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#include <linux/table.h>
|
|
||||||
|
|
||||||
#include "version.h"
|
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
# define KSTK_EIP(tsk) (((unsigned long *)tsk->kernel_stack_page)[1019])
|
|
||||||
# define KSTK_ESP(tsk) (((unsigned long *)tsk->kernel_stack_page)[1022])
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
/*
|
|
||||||
* See arch/alpha/kernel/ptrace.c for details.
|
|
||||||
*/
|
|
||||||
# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \
|
|
||||||
+ (long)&((struct pt_regs *)0)->reg)
|
|
||||||
# define KSTK_EIP(tsk) (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
|
|
||||||
# define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp)
|
|
||||||
#elif defined(__sparc__)
|
|
||||||
# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \
|
|
||||||
+ (long)&((struct pt_regs *)0)->reg)
|
|
||||||
# define KSTK_EIP(tsk) (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
|
|
||||||
# define KSTK_ESP(tsk) (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(u_regs[UREG_FP])))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct task_struct *
|
|
||||||
get_task (pid_t pid)
|
|
||||||
{
|
|
||||||
struct task_struct ** p;
|
|
||||||
|
|
||||||
p = task;
|
|
||||||
while (++p < task+NR_TASKS) {
|
|
||||||
if (*p && (*p)->pid == pid)
|
|
||||||
return *p;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
|
|
||||||
int * pages, int * shared, int * dirty, int * total)
|
|
||||||
{
|
|
||||||
pte_t * pte;
|
|
||||||
unsigned long end;
|
|
||||||
|
|
||||||
if (pmd_none(*pmd))
|
|
||||||
return;
|
|
||||||
if (pmd_bad(*pmd)) {
|
|
||||||
printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd));
|
|
||||||
pmd_clear(pmd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pte = pte_offset(pmd, address);
|
|
||||||
address &= ~PMD_MASK;
|
|
||||||
end = address + size;
|
|
||||||
if (end > PMD_SIZE)
|
|
||||||
end = PMD_SIZE;
|
|
||||||
do {
|
|
||||||
pte_t page = *pte;
|
|
||||||
|
|
||||||
address += PAGE_SIZE;
|
|
||||||
pte++;
|
|
||||||
if (pte_none(page))
|
|
||||||
continue;
|
|
||||||
++*total;
|
|
||||||
if (!pte_present(page))
|
|
||||||
continue;
|
|
||||||
++*pages;
|
|
||||||
if (pte_dirty(page))
|
|
||||||
++*dirty;
|
|
||||||
if (pte_page(page) >= high_memory)
|
|
||||||
continue;
|
|
||||||
if (mem_map[MAP_NR(pte_page(page))].count > 1)
|
|
||||||
++*shared;
|
|
||||||
} while (address < end);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size,
|
|
||||||
int * pages, int * shared, int * dirty, int * total)
|
|
||||||
{
|
|
||||||
pmd_t * pmd;
|
|
||||||
unsigned long end;
|
|
||||||
|
|
||||||
if (pgd_none(*pgd))
|
|
||||||
return;
|
|
||||||
if (pgd_bad(*pgd)) {
|
|
||||||
printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd));
|
|
||||||
pgd_clear(pgd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pmd = pmd_offset(pgd, address);
|
|
||||||
address &= ~PGDIR_MASK;
|
|
||||||
end = address + size;
|
|
||||||
if (end > PGDIR_SIZE)
|
|
||||||
end = PGDIR_SIZE;
|
|
||||||
do {
|
|
||||||
statm_pte_range(pmd, address, end - address, pages, shared, dirty, total);
|
|
||||||
address = (address + PMD_SIZE) & PMD_MASK;
|
|
||||||
pmd++;
|
|
||||||
} while (address < end);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end,
|
|
||||||
int * pages, int * shared, int * dirty, int * total)
|
|
||||||
{
|
|
||||||
while (address < end) {
|
|
||||||
statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total);
|
|
||||||
address = (address + PGDIR_SIZE) & PGDIR_MASK;
|
|
||||||
pgd++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned long
|
|
||||||
get_wchan (struct task_struct *p)
|
|
||||||
{
|
|
||||||
if (!p || p == current || p->state == TASK_RUNNING)
|
|
||||||
return 0;
|
|
||||||
#if defined(__i386__)
|
|
||||||
{
|
|
||||||
unsigned long ebp, eip;
|
|
||||||
unsigned long stack_page;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
stack_page = p->kernel_stack_page;
|
|
||||||
if (!stack_page)
|
|
||||||
return 0;
|
|
||||||
ebp = p->tss.ebp;
|
|
||||||
do {
|
|
||||||
if (ebp < stack_page || ebp >= 4092+stack_page)
|
|
||||||
return 0;
|
|
||||||
eip = *(unsigned long *) (ebp+4);
|
|
||||||
if (eip < (unsigned long) interruptible_sleep_on
|
|
||||||
|| eip >= (unsigned long) add_timer)
|
|
||||||
return eip;
|
|
||||||
ebp = *(unsigned long *) ebp;
|
|
||||||
} while (count++ < 16);
|
|
||||||
}
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
/*
|
|
||||||
* This one depends on the frame size of schedule(). Do a
|
|
||||||
* "disass schedule" in gdb to find the frame size. Also, the
|
|
||||||
* code assumes that sleep_on() follows immediately after
|
|
||||||
* interruptible_sleep_on() and that add_timer() follows
|
|
||||||
* immediately after interruptible_sleep(). Ugly, isn't it?
|
|
||||||
* Maybe adding a wchan field to task_struct would be better,
|
|
||||||
* after all...
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
unsigned long schedule_frame;
|
|
||||||
unsigned long pc;
|
|
||||||
|
|
||||||
pc = thread_saved_pc(&p->tss);
|
|
||||||
if (pc >= (unsigned long) interruptible_sleep_on && pc < (unsigned long) add_timer) {
|
|
||||||
schedule_frame = ((unsigned long *)p->tss.ksp)[6];
|
|
||||||
return ((unsigned long *)schedule_frame)[12];
|
|
||||||
}
|
|
||||||
return pc;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
asmlinkage int
|
|
||||||
sys_table (int type, union table *buf, const void *param)
|
|
||||||
{
|
|
||||||
union table tbl;
|
|
||||||
struct sysinfo i;
|
|
||||||
struct task_struct *tsk = NULL;
|
|
||||||
int index, err;
|
|
||||||
pid_t pid;
|
|
||||||
|
|
||||||
if (type == TABLE_VERSION)
|
|
||||||
return _TABLE_VERSION;
|
|
||||||
|
|
||||||
if (!buf)
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
memset (&tbl, 0, sizeof (union table));
|
|
||||||
|
|
||||||
/* For TABLE_PROC_*, read pid and get task_struct */
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case TABLE_PROC_UID:
|
|
||||||
case TABLE_PROC_MEM:
|
|
||||||
case TABLE_PROC_SEGMENT:
|
|
||||||
case TABLE_PROC_TIME:
|
|
||||||
case TABLE_PROC_STATE:
|
|
||||||
case TABLE_PROC_SIGNAL:
|
|
||||||
case TABLE_PROC_KERNEL:
|
|
||||||
err = verify_area (VERIFY_READ, param, sizeof (pid_t));
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
memcpy_fromfs (&pid, param, sizeof (pid_t));
|
|
||||||
|
|
||||||
tsk = get_task (pid);
|
|
||||||
if (tsk == NULL)
|
|
||||||
return -ESRCH;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main function dispatcher */
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case TABLE_PROCLIST:
|
|
||||||
tsk = task [0];
|
|
||||||
for (index = 0; index < nr_tasks; index++) {
|
|
||||||
tbl.proclist.pids [index] = tsk->pid;
|
|
||||||
tsk = tsk->next_task;
|
|
||||||
}
|
|
||||||
tbl.proclist.nr_running = nr_running;
|
|
||||||
tbl.proclist.nr_tasks = nr_tasks;
|
|
||||||
tbl.proclist.last_pid = last_pid;
|
|
||||||
break;
|
|
||||||
case TABLE_CPU:
|
|
||||||
tbl.cpu.total = jiffies;
|
|
||||||
tbl.cpu.user = kstat.cpu_user;
|
|
||||||
tbl.cpu.nice = kstat.cpu_nice;
|
|
||||||
tbl.cpu.sys = kstat.cpu_system;
|
|
||||||
tbl.cpu.idle = tbl.cpu.total -
|
|
||||||
(tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys);
|
|
||||||
tbl.cpu.frequency = HZ;
|
|
||||||
break;
|
|
||||||
case TABLE_MEM:
|
|
||||||
si_meminfo (&i);
|
|
||||||
tbl.mem.total = i.totalram;
|
|
||||||
tbl.mem.used = i.totalram - i.freeram;
|
|
||||||
tbl.mem.free = i.freeram;
|
|
||||||
tbl.mem.shared = i.sharedram;
|
|
||||||
tbl.mem.buffer = i.bufferram;
|
|
||||||
tbl.mem.cached = page_cache_size << PAGE_SHIFT;
|
|
||||||
break;
|
|
||||||
case TABLE_SWAP:
|
|
||||||
si_swapinfo (&i);
|
|
||||||
tbl.swap.total = i.totalswap;
|
|
||||||
tbl.swap.used = i.totalswap - i.freeswap;
|
|
||||||
tbl.swap.free = i.freeswap;
|
|
||||||
tbl.swap.pagein = kstat.pswpin;
|
|
||||||
tbl.swap.pageout = kstat.pswpout;
|
|
||||||
break;
|
|
||||||
case TABLE_LOADAVG:
|
|
||||||
tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
|
|
||||||
tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT);
|
|
||||||
tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT);
|
|
||||||
tbl.loadavg.nr_running = nr_running;
|
|
||||||
tbl.loadavg.nr_tasks = nr_tasks;
|
|
||||||
tbl.loadavg.last_pid = last_pid;
|
|
||||||
break;
|
|
||||||
case TABLE_UPTIME:
|
|
||||||
tbl.uptime.uptime = jiffies;
|
|
||||||
tbl.uptime.idle = task[0]->utime + task[0]->stime;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_STATE:
|
|
||||||
tbl.proc_state.state = tsk->state;
|
|
||||||
tbl.proc_state.flags = tsk->flags;
|
|
||||||
memcpy (tbl.proc_state.comm, tsk->comm,
|
|
||||||
sizeof (tbl.proc_state.comm));
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_UID:
|
|
||||||
tbl.proc_uid.uid = tsk->uid;
|
|
||||||
tbl.proc_uid.euid = tsk->euid;
|
|
||||||
tbl.proc_uid.suid = tsk->suid;
|
|
||||||
tbl.proc_uid.fsuid = tsk->fsuid;
|
|
||||||
|
|
||||||
tbl.proc_uid.gid = tsk->gid;
|
|
||||||
tbl.proc_uid.egid = tsk->egid;
|
|
||||||
tbl.proc_uid.sgid = tsk->sgid;
|
|
||||||
tbl.proc_uid.fsgid = tsk->fsgid;
|
|
||||||
|
|
||||||
tbl.proc_uid.pid = tsk->pid;
|
|
||||||
tbl.proc_uid.pgrp = tsk->pgrp;
|
|
||||||
tbl.proc_uid.ppid = tsk->p_pptr->pid;
|
|
||||||
|
|
||||||
tbl.proc_uid.session = tsk->session;
|
|
||||||
tbl.proc_uid.tty = tsk->tty ?
|
|
||||||
kdev_t_to_nr (tsk->tty->device) : 0;
|
|
||||||
tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1;
|
|
||||||
|
|
||||||
tbl.proc_uid.priority = tsk->priority;
|
|
||||||
tbl.proc_uid.counter = tsk->counter;
|
|
||||||
tbl.proc_uid.def_priority = DEF_PRIORITY;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_SIGNAL:
|
|
||||||
tbl.proc_signal.signal = tsk->signal;
|
|
||||||
tbl.proc_signal.blocked = tsk->blocked;
|
|
||||||
|
|
||||||
if (tsk->sig) {
|
|
||||||
struct sigaction * action = tsk->sig->action;
|
|
||||||
unsigned long sig_ign = 0, sig_caught = 0;
|
|
||||||
unsigned long bit = 1;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 32; i++) {
|
|
||||||
switch((unsigned long) action->sa_handler) {
|
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
sig_ign |= bit;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
sig_caught |= bit;
|
|
||||||
}
|
|
||||||
bit <<= 1;
|
|
||||||
action++;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbl.proc_signal.ignored = sig_ign;
|
|
||||||
tbl.proc_signal.caught = sig_caught;
|
|
||||||
} else {
|
|
||||||
tbl.proc_signal.ignored = 0;
|
|
||||||
tbl.proc_signal.caught = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_MEM:
|
|
||||||
if (tsk->mm && tsk->mm != &init_mm) {
|
|
||||||
tbl.proc_mem.context = tsk->mm->context;
|
|
||||||
tbl.proc_mem.start_code = tsk->mm->start_code;
|
|
||||||
tbl.proc_mem.end_code = tsk->mm->end_code;
|
|
||||||
tbl.proc_mem.start_data = tsk->mm-> start_data;
|
|
||||||
tbl.proc_mem.end_data = tsk->mm->end_data;
|
|
||||||
tbl.proc_mem.start_brk = tsk->mm->start_brk;
|
|
||||||
tbl.proc_mem.brk = tsk->mm->brk;
|
|
||||||
tbl.proc_mem.start_stack = tsk->mm->start_stack;
|
|
||||||
tbl.proc_mem.start_mmap = tsk->mm->start_mmap;
|
|
||||||
tbl.proc_mem.arg_start = tsk->mm->arg_start;
|
|
||||||
tbl.proc_mem.arg_end = tsk->mm->arg_end;
|
|
||||||
tbl.proc_mem.env_start = tsk->mm->env_start;
|
|
||||||
tbl.proc_mem.env_end = tsk->mm->env_end;
|
|
||||||
tbl.proc_mem.rss = tsk->mm->rss;
|
|
||||||
tbl.proc_mem.total_vm = tsk->mm->total_vm;
|
|
||||||
tbl.proc_mem.locked_vm = tsk->mm->locked_vm;
|
|
||||||
}
|
|
||||||
tbl.proc_mem.rlim = tsk->rlim ?
|
|
||||||
tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_SEGMENT:
|
|
||||||
if (tsk->mm && tsk->mm != &init_mm) {
|
|
||||||
unsigned long vsize = 0;
|
|
||||||
int size = 0, resident = 0, share = 0;
|
|
||||||
int trs = 0, lrs = 0, drs = 0, dt = 0;
|
|
||||||
struct vm_area_struct * vma = tsk->mm->mmap;
|
|
||||||
|
|
||||||
while (vma) {
|
|
||||||
pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start);
|
|
||||||
int pages = 0, shared = 0, dirty = 0, total = 0;
|
|
||||||
|
|
||||||
vsize += vma->vm_end - vma->vm_start;
|
|
||||||
|
|
||||||
statm_pgd_range (pgd, vma->vm_start, vma->vm_end,
|
|
||||||
&pages, &shared, &dirty, &total);
|
|
||||||
resident += pages;
|
|
||||||
share += shared;
|
|
||||||
dt += dirty;
|
|
||||||
size += total;
|
|
||||||
if (vma->vm_flags & VM_EXECUTABLE)
|
|
||||||
trs += pages; /* text */
|
|
||||||
else if (vma->vm_flags & VM_GROWSDOWN)
|
|
||||||
drs += pages; /* stack */
|
|
||||||
else if (vma->vm_end > 0x60000000)
|
|
||||||
lrs += pages; /* library */
|
|
||||||
else
|
|
||||||
drs += pages;
|
|
||||||
vma = vma->vm_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbl.proc_segment.vsize = vsize;
|
|
||||||
tbl.proc_segment.size = size;
|
|
||||||
tbl.proc_segment.resident = resident;
|
|
||||||
tbl.proc_segment.shared = share;
|
|
||||||
tbl.proc_segment.trs = trs;
|
|
||||||
tbl.proc_segment.lrs = lrs;
|
|
||||||
tbl.proc_segment.dt = dt;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_TIME:
|
|
||||||
tbl.proc_time.utime = tsk->utime;
|
|
||||||
tbl.proc_time.stime = tsk->stime;
|
|
||||||
tbl.proc_time.cutime = tsk->cutime;
|
|
||||||
tbl.proc_time.cstime = tsk->cstime;
|
|
||||||
|
|
||||||
tbl.proc_time.start_time = tsk->start_time;
|
|
||||||
tbl.proc_time.timeout = tsk->timeout;
|
|
||||||
tbl.proc_time.policy = tsk->policy;
|
|
||||||
tbl.proc_time.rt_priority = tsk->rt_priority;
|
|
||||||
|
|
||||||
tbl.proc_time.it_real_value = tsk->it_real_value;
|
|
||||||
tbl.proc_time.it_prof_value = tsk->it_prof_value;
|
|
||||||
tbl.proc_time.it_virt_value = tsk->it_virt_value;
|
|
||||||
tbl.proc_time.it_real_incr = tsk->it_real_incr;
|
|
||||||
tbl.proc_time.it_prof_incr = tsk->it_prof_incr;
|
|
||||||
tbl.proc_time.it_virt_incr = tsk->it_virt_incr;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_KERNEL:
|
|
||||||
tbl.proc_kernel.min_flt = tsk->min_flt;
|
|
||||||
tbl.proc_kernel.cmin_flt = tsk->cmin_flt;
|
|
||||||
tbl.proc_kernel.maj_flt = tsk->maj_flt;
|
|
||||||
tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt;
|
|
||||||
|
|
||||||
tbl.proc_kernel.kesp = tsk->kernel_stack_page ? KSTK_EIP(tsk) : 0;
|
|
||||||
tbl.proc_kernel.keip = tsk->kernel_stack_page ? KSTK_ESP(tsk) : 0;
|
|
||||||
|
|
||||||
tbl.proc_kernel.nswap = tsk->nswap;
|
|
||||||
tbl.proc_kernel.cnswap = tsk->cnswap;
|
|
||||||
|
|
||||||
tbl.proc_kernel.wchan = get_wchan (tsk);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = verify_area (VERIFY_WRITE, buf, sizeof (struct table));
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
memcpy_tofs (buf, &tbl, sizeof (union table));
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1 +0,0 @@
|
|||||||
#define _TABLE_VERSION 1
|
|
@@ -1,16 +0,0 @@
|
|||||||
#
|
|
||||||
# Makefile for the linux system information tables.
|
|
||||||
#
|
|
||||||
# Note! Dependencies are done automagically by 'make dep', which also
|
|
||||||
# removes any old dependencies. DON'T put your own dependencies here
|
|
||||||
# unless it's something special (ie not a .c file).
|
|
||||||
#
|
|
||||||
# Note 2! The CFLAGS definition is now in the main makefile...
|
|
||||||
|
|
||||||
O_TARGET := table.o
|
|
||||||
OX_OBJS := main.o
|
|
||||||
|
|
||||||
M_TARGET := module.o
|
|
||||||
MX_OBJS := module.o
|
|
||||||
|
|
||||||
include $(TOPDIR)/Rules.make
|
|
@@ -1,21 +0,0 @@
|
|||||||
This is a new system call `table ()' for the Linux table. It is faster
|
|
||||||
than reading from /proc and can be used to fetch all information required
|
|
||||||
for libgtop until whe have some other function (extended sysctl, ...) in
|
|
||||||
standard kernels.
|
|
||||||
|
|
||||||
I didn't want to change sysctl or some other function myself cause this may
|
|
||||||
cause other applications relying upon those function to fail. This is
|
|
||||||
something for the ``real'' kernel gurus ...
|
|
||||||
|
|
||||||
To use this new system call for libgtop, do the following:
|
|
||||||
|
|
||||||
* Copy this directory to /usr/src/linux/table
|
|
||||||
* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h
|
|
||||||
* Apply the patch `kernel.patch' to the kernel, compile, install and reboot
|
|
||||||
* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again).
|
|
||||||
|
|
||||||
If you want to change and/or add something - feel free to do so !
|
|
||||||
|
|
||||||
Have fun,
|
|
||||||
|
|
||||||
Martin
|
|
@@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
* linux/table/table_impl.c
|
|
||||||
* Copyright (C) 1998 Martin Baulig
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/kernel_stat.h>
|
|
||||||
#include <linux/tty.h>
|
|
||||||
#include <linux/user.h>
|
|
||||||
#include <linux/a.out.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
#include <linux/mman.h>
|
|
||||||
#include <linux/proc_fs.h>
|
|
||||||
#include <linux/ioport.h>
|
|
||||||
#include <linux/config.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
#include <linux/pagemap.h>
|
|
||||||
#include <linux/swap.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/smp.h>
|
|
||||||
#include <linux/signal.h>
|
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
|
||||||
#include <asm/pgtable.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/table.h>
|
|
||||||
|
|
||||||
#include "version.h"
|
|
||||||
|
|
||||||
extern void scheduling_functions_start_here(void);
|
|
||||||
extern void scheduling_functions_end_here(void);
|
|
||||||
|
|
||||||
int (*table_function_ptr) (int, union table *, const void *) = 0;
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(table_function_ptr);
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(nr_running);
|
|
||||||
EXPORT_SYMBOL(pidhash);
|
|
||||||
EXPORT_SYMBOL(task);
|
|
||||||
EXPORT_SYMBOL(si_swapinfo);
|
|
||||||
EXPORT_SYMBOL(scheduling_functions_start_here);
|
|
||||||
EXPORT_SYMBOL(scheduling_functions_end_here);
|
|
||||||
EXPORT_SYMBOL(avenrun);
|
|
||||||
EXPORT_SYMBOL(nr_tasks);
|
|
||||||
EXPORT_SYMBOL(last_pid);
|
|
||||||
EXPORT_SYMBOL(page_cache_size);
|
|
||||||
EXPORT_SYMBOL(init_mm);
|
|
||||||
|
|
||||||
asmlinkage int
|
|
||||||
sys_table (int type, union table *buf, const void *param)
|
|
||||||
{
|
|
||||||
if (table_function_ptr == 0)
|
|
||||||
return -ENOSYS;
|
|
||||||
|
|
||||||
return (*table_function_ptr) (type, buf, param);
|
|
||||||
}
|
|
@@ -1,551 +0,0 @@
|
|||||||
/*
|
|
||||||
* linux/table/table_impl.c
|
|
||||||
* Copyright (C) 1998 Martin Baulig
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/kernel_stat.h>
|
|
||||||
#include <linux/tty.h>
|
|
||||||
#include <linux/user.h>
|
|
||||||
#include <linux/a.out.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
#include <linux/mman.h>
|
|
||||||
#include <linux/proc_fs.h>
|
|
||||||
#include <linux/ioport.h>
|
|
||||||
#include <linux/config.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
#include <linux/pagemap.h>
|
|
||||||
#include <linux/swap.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/smp.h>
|
|
||||||
#include <linux/signal.h>
|
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
|
||||||
#include <asm/pgtable.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/table.h>
|
|
||||||
|
|
||||||
#include "version.h"
|
|
||||||
|
|
||||||
extern int (*table_function_ptr) (int, union table *, const void *);
|
|
||||||
|
|
||||||
int table_fkt (int, union table *, const void *);
|
|
||||||
|
|
||||||
EXPORT_NO_SYMBOLS;
|
|
||||||
|
|
||||||
int
|
|
||||||
init_module(void)
|
|
||||||
{
|
|
||||||
printk ("init_module () = %p - %d, %d\n",
|
|
||||||
table_fkt, sizeof (union table), sizeof (sigset_t));
|
|
||||||
table_function_ptr = table_fkt;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
cleanup_module(void)
|
|
||||||
{
|
|
||||||
table_function_ptr = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define LOAD_INT(x) ((x) >> FSHIFT)
|
|
||||||
#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
|
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_MALLOC
|
|
||||||
int get_malloc(char * buffer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
|
|
||||||
sigset_t *catch)
|
|
||||||
{
|
|
||||||
struct k_sigaction *k;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
sigemptyset(ign);
|
|
||||||
sigemptyset(catch);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
printk ("collect_sigign_sigcatch: %p - %p\n",
|
|
||||||
p, p->sig);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (p->sig) {
|
|
||||||
k = p->sig->action;
|
|
||||||
for (i = 1; i <= _NSIG; ++i, ++k) {
|
|
||||||
#if 0
|
|
||||||
printk ("signal: %d - %p (%p, %p)\n",
|
|
||||||
i, k->sa.sa_handler, SIG_IGN, SIG_DFL);
|
|
||||||
#endif
|
|
||||||
if (k->sa.sa_handler == SIG_IGN)
|
|
||||||
sigaddset(ign, i);
|
|
||||||
else if (k->sa.sa_handler != SIG_DFL)
|
|
||||||
sigaddset(catch, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These bracket the sleeping functions..
|
|
||||||
*/
|
|
||||||
extern void scheduling_functions_start_here(void);
|
|
||||||
extern void scheduling_functions_end_here(void);
|
|
||||||
#define first_sched ((unsigned long) scheduling_functions_start_here)
|
|
||||||
#define last_sched ((unsigned long) scheduling_functions_end_here)
|
|
||||||
|
|
||||||
static unsigned long get_wchan(struct task_struct *p)
|
|
||||||
{
|
|
||||||
if (!p || p == current || p->state == TASK_RUNNING)
|
|
||||||
return 0;
|
|
||||||
#if defined(__i386__)
|
|
||||||
{
|
|
||||||
unsigned long ebp, eip;
|
|
||||||
unsigned long stack_page;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
stack_page = 4096 + (unsigned long)p;
|
|
||||||
if (!stack_page)
|
|
||||||
return 0;
|
|
||||||
ebp = p->tss.ebp;
|
|
||||||
do {
|
|
||||||
if (ebp < stack_page || ebp >= 4092+stack_page)
|
|
||||||
return 0;
|
|
||||||
eip = *(unsigned long *) (ebp+4);
|
|
||||||
if (eip < first_sched || eip >= last_sched)
|
|
||||||
return eip;
|
|
||||||
ebp = *(unsigned long *) ebp;
|
|
||||||
} while (count++ < 16);
|
|
||||||
}
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
/*
|
|
||||||
* This one depends on the frame size of schedule(). Do a
|
|
||||||
* "disass schedule" in gdb to find the frame size. Also, the
|
|
||||||
* code assumes that sleep_on() follows immediately after
|
|
||||||
* interruptible_sleep_on() and that add_timer() follows
|
|
||||||
* immediately after interruptible_sleep(). Ugly, isn't it?
|
|
||||||
* Maybe adding a wchan field to task_struct would be better,
|
|
||||||
* after all...
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
unsigned long schedule_frame;
|
|
||||||
unsigned long pc;
|
|
||||||
|
|
||||||
pc = thread_saved_pc(&p->tss);
|
|
||||||
if (pc >= first_sched && pc < last_sched) {
|
|
||||||
schedule_frame = ((unsigned long *)p->tss.ksp)[6];
|
|
||||||
return ((unsigned long *)schedule_frame)[12];
|
|
||||||
}
|
|
||||||
return pc;
|
|
||||||
}
|
|
||||||
#elif defined(__mc68000__)
|
|
||||||
{
|
|
||||||
unsigned long fp, pc;
|
|
||||||
unsigned long stack_page;
|
|
||||||
int count = 0;
|
|
||||||
extern int sys_pause (void);
|
|
||||||
|
|
||||||
stack_page = p->kernel_stack_page;
|
|
||||||
if (!stack_page)
|
|
||||||
return 0;
|
|
||||||
fp = ((struct switch_stack *)p->tss.ksp)->a6;
|
|
||||||
do {
|
|
||||||
if (fp < stack_page || fp >= 4088+stack_page)
|
|
||||||
return 0;
|
|
||||||
pc = ((unsigned long *)fp)[1];
|
|
||||||
/* FIXME: This depends on the order of these functions. */
|
|
||||||
if (pc < first_sched || pc >= last_sched)
|
|
||||||
return pc;
|
|
||||||
fp = *(unsigned long *) fp;
|
|
||||||
} while (count++ < 16);
|
|
||||||
}
|
|
||||||
#elif defined(__powerpc__)
|
|
||||||
return (p->tss.wchan);
|
|
||||||
#elif defined (CONFIG_ARM)
|
|
||||||
{
|
|
||||||
unsigned long fp, lr;
|
|
||||||
unsigned long stack_page;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
stack_page = 4096 + (unsigned long)p;
|
|
||||||
fp = get_css_fp (&p->tss);
|
|
||||||
do {
|
|
||||||
if (fp < stack_page || fp > 4092+stack_page)
|
|
||||||
return 0;
|
|
||||||
lr = pc_pointer (((unsigned long *)fp)[-1]);
|
|
||||||
if (lr < first_sched || lr > last_sched)
|
|
||||||
return lr;
|
|
||||||
fp = *(unsigned long *) (fp - 12);
|
|
||||||
} while (count ++ < 16);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
# define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
|
|
||||||
# define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
|
|
||||||
#elif defined(__alpha__)
|
|
||||||
/*
|
|
||||||
* See arch/alpha/kernel/ptrace.c for details.
|
|
||||||
*/
|
|
||||||
# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \
|
|
||||||
+ (long)&((struct pt_regs *)0)->reg)
|
|
||||||
# define KSTK_EIP(tsk) \
|
|
||||||
(*(unsigned long *)(PT_REG(pc) + PAGE_SIZE + (unsigned long)(tsk)))
|
|
||||||
# define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp)
|
|
||||||
#elif defined(CONFIG_ARM)
|
|
||||||
# define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
|
|
||||||
# define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
|
|
||||||
#elif defined(__mc68000__)
|
|
||||||
#define KSTK_EIP(tsk) \
|
|
||||||
({ \
|
|
||||||
unsigned long eip = 0; \
|
|
||||||
if ((tsk)->tss.esp0 > PAGE_SIZE && \
|
|
||||||
MAP_NR((tsk)->tss.esp0) < max_mapnr) \
|
|
||||||
eip = ((struct pt_regs *) (tsk)->tss.esp0)->pc; \
|
|
||||||
eip; })
|
|
||||||
#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp)
|
|
||||||
#elif defined(__powerpc__)
|
|
||||||
#define KSTK_EIP(tsk) ((tsk)->tss.regs->nip)
|
|
||||||
#define KSTK_ESP(tsk) ((tsk)->tss.regs->gpr[1])
|
|
||||||
#elif defined (__sparc_v9__)
|
|
||||||
# define KSTK_EIP(tsk) ((tsk)->tss.kregs->tpc)
|
|
||||||
# define KSTK_ESP(tsk) ((tsk)->tss.kregs->u_regs[UREG_FP])
|
|
||||||
#elif defined(__sparc__)
|
|
||||||
# define KSTK_EIP(tsk) ((tsk)->tss.kregs->pc)
|
|
||||||
# define KSTK_ESP(tsk) ((tsk)->tss.kregs->u_regs[UREG_FP])
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Gcc optimizes away "strlen(x)" for constant x */
|
|
||||||
#define ADDBUF(buffer, string) \
|
|
||||||
do { memcpy(buffer, string, strlen(string)); \
|
|
||||||
buffer += strlen(string); } while (0)
|
|
||||||
|
|
||||||
static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
|
|
||||||
int * pages, int * shared, int * dirty, int * total)
|
|
||||||
{
|
|
||||||
pte_t * pte;
|
|
||||||
unsigned long end;
|
|
||||||
|
|
||||||
if (pmd_none(*pmd))
|
|
||||||
return;
|
|
||||||
if (pmd_bad(*pmd)) {
|
|
||||||
printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd));
|
|
||||||
pmd_clear(pmd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pte = pte_offset(pmd, address);
|
|
||||||
address &= ~PMD_MASK;
|
|
||||||
end = address + size;
|
|
||||||
if (end > PMD_SIZE)
|
|
||||||
end = PMD_SIZE;
|
|
||||||
do {
|
|
||||||
pte_t page = *pte;
|
|
||||||
|
|
||||||
address += PAGE_SIZE;
|
|
||||||
pte++;
|
|
||||||
if (pte_none(page))
|
|
||||||
continue;
|
|
||||||
++*total;
|
|
||||||
if (!pte_present(page))
|
|
||||||
continue;
|
|
||||||
++*pages;
|
|
||||||
if (pte_dirty(page))
|
|
||||||
++*dirty;
|
|
||||||
if (MAP_NR(pte_page(page)) >= max_mapnr)
|
|
||||||
continue;
|
|
||||||
if (atomic_read(&mem_map[MAP_NR(pte_page(page))].count) > 1)
|
|
||||||
++*shared;
|
|
||||||
} while (address < end);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size,
|
|
||||||
int * pages, int * shared, int * dirty, int * total)
|
|
||||||
{
|
|
||||||
pmd_t * pmd;
|
|
||||||
unsigned long end;
|
|
||||||
|
|
||||||
if (pgd_none(*pgd))
|
|
||||||
return;
|
|
||||||
if (pgd_bad(*pgd)) {
|
|
||||||
printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd));
|
|
||||||
pgd_clear(pgd);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pmd = pmd_offset(pgd, address);
|
|
||||||
address &= ~PGDIR_MASK;
|
|
||||||
end = address + size;
|
|
||||||
if (end > PGDIR_SIZE)
|
|
||||||
end = PGDIR_SIZE;
|
|
||||||
do {
|
|
||||||
statm_pte_range(pmd, address, end - address, pages, shared, dirty, total);
|
|
||||||
address = (address + PMD_SIZE) & PMD_MASK;
|
|
||||||
pmd++;
|
|
||||||
} while (address < end);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end,
|
|
||||||
int * pages, int * shared, int * dirty, int * total)
|
|
||||||
{
|
|
||||||
while (address < end) {
|
|
||||||
statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total);
|
|
||||||
address = (address + PGDIR_SIZE) & PGDIR_MASK;
|
|
||||||
pgd++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
table_fkt (int type, union table *buf, const void *param)
|
|
||||||
{
|
|
||||||
union table tbl;
|
|
||||||
struct sysinfo i;
|
|
||||||
struct task_struct *tsk = NULL;
|
|
||||||
sigset_t sigign, sigcatch;
|
|
||||||
int index, err;
|
|
||||||
pid_t pid;
|
|
||||||
|
|
||||||
if (type == TABLE_VERSION)
|
|
||||||
return _TABLE_VERSION;
|
|
||||||
|
|
||||||
if (!buf)
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
memset (&tbl, 0, sizeof (union table));
|
|
||||||
|
|
||||||
/* For TABLE_PROC_*, read pid and get task_struct */
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case TABLE_PROC_UID:
|
|
||||||
case TABLE_PROC_MEM:
|
|
||||||
case TABLE_PROC_SEGMENT:
|
|
||||||
case TABLE_PROC_TIME:
|
|
||||||
case TABLE_PROC_STATE:
|
|
||||||
case TABLE_PROC_SIGNAL:
|
|
||||||
case TABLE_PROC_KERNEL:
|
|
||||||
err = verify_area (VERIFY_READ, param, sizeof (pid_t));
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
copy_from_user (&pid, param, sizeof (pid_t));
|
|
||||||
|
|
||||||
read_lock (&tasklist_lock);
|
|
||||||
tsk = find_task_by_pid (pid);
|
|
||||||
/* FIXME!! This should be done after the last use */
|
|
||||||
read_unlock(&tasklist_lock);
|
|
||||||
|
|
||||||
if (tsk == NULL)
|
|
||||||
return -ESRCH;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main function dispatcher */
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case TABLE_PROCLIST:
|
|
||||||
tsk = task [0];
|
|
||||||
for (index = 0; index < nr_tasks; index++) {
|
|
||||||
tbl.proclist.pids [index] = tsk->pid;
|
|
||||||
tsk = tsk->next_task;
|
|
||||||
}
|
|
||||||
tbl.proclist.nr_running = nr_running;
|
|
||||||
tbl.proclist.nr_tasks = nr_tasks;
|
|
||||||
tbl.proclist.last_pid = last_pid;
|
|
||||||
break;
|
|
||||||
case TABLE_CPU:
|
|
||||||
tbl.cpu.total = jiffies;
|
|
||||||
tbl.cpu.user = kstat.cpu_user;
|
|
||||||
tbl.cpu.nice = kstat.cpu_nice;
|
|
||||||
tbl.cpu.sys = kstat.cpu_system;
|
|
||||||
tbl.cpu.idle = tbl.cpu.total -
|
|
||||||
(tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys);
|
|
||||||
tbl.cpu.frequency = HZ;
|
|
||||||
break;
|
|
||||||
case TABLE_MEM:
|
|
||||||
si_meminfo (&i);
|
|
||||||
tbl.mem.total = i.totalram;
|
|
||||||
tbl.mem.used = i.totalram - i.freeram;
|
|
||||||
tbl.mem.free = i.freeram;
|
|
||||||
tbl.mem.shared = i.sharedram;
|
|
||||||
tbl.mem.buffer = i.bufferram;
|
|
||||||
tbl.mem.cached = page_cache_size << PAGE_SHIFT;
|
|
||||||
break;
|
|
||||||
case TABLE_SWAP:
|
|
||||||
si_swapinfo (&i);
|
|
||||||
tbl.swap.total = i.totalswap;
|
|
||||||
tbl.swap.used = i.totalswap - i.freeswap;
|
|
||||||
tbl.swap.free = i.freeswap;
|
|
||||||
break;
|
|
||||||
case TABLE_LOADAVG:
|
|
||||||
tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
|
|
||||||
tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT);
|
|
||||||
tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT);
|
|
||||||
tbl.loadavg.nr_running = nr_running;
|
|
||||||
tbl.loadavg.nr_tasks = nr_tasks;
|
|
||||||
tbl.loadavg.last_pid = last_pid;
|
|
||||||
break;
|
|
||||||
case TABLE_UPTIME:
|
|
||||||
tbl.uptime.uptime = jiffies;
|
|
||||||
tbl.uptime.idle = task[0]->times.tms_utime +
|
|
||||||
task[0]->times.tms_stime;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_STATE:
|
|
||||||
tbl.proc_state.state = tsk->state;
|
|
||||||
tbl.proc_state.flags = tsk->flags;
|
|
||||||
memcpy (tbl.proc_state.comm, tsk->comm,
|
|
||||||
sizeof (tbl.proc_state.comm));
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_UID:
|
|
||||||
tbl.proc_uid.uid = tsk->uid;
|
|
||||||
tbl.proc_uid.euid = tsk->euid;
|
|
||||||
tbl.proc_uid.suid = tsk->suid;
|
|
||||||
tbl.proc_uid.fsuid = tsk->fsuid;
|
|
||||||
|
|
||||||
tbl.proc_uid.gid = tsk->gid;
|
|
||||||
tbl.proc_uid.egid = tsk->egid;
|
|
||||||
tbl.proc_uid.sgid = tsk->sgid;
|
|
||||||
tbl.proc_uid.fsgid = tsk->fsgid;
|
|
||||||
|
|
||||||
tbl.proc_uid.pid = tsk->pid;
|
|
||||||
tbl.proc_uid.pgrp = tsk->pgrp;
|
|
||||||
tbl.proc_uid.ppid = tsk->p_pptr->pid;
|
|
||||||
|
|
||||||
tbl.proc_uid.session = tsk->session;
|
|
||||||
tbl.proc_uid.tty = tsk->tty ?
|
|
||||||
kdev_t_to_nr (tsk->tty->device) : 0;
|
|
||||||
tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1;
|
|
||||||
|
|
||||||
tbl.proc_uid.priority = tsk->priority;
|
|
||||||
tbl.proc_uid.counter = tsk->counter;
|
|
||||||
tbl.proc_uid.def_priority = DEF_PRIORITY;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_SIGNAL:
|
|
||||||
memcpy (&tbl.proc_signal.signal, &tsk->signal,
|
|
||||||
sizeof (tbl.proc_signal.signal));
|
|
||||||
|
|
||||||
memcpy (&tbl.proc_signal.blocked, &tsk->blocked,
|
|
||||||
sizeof (tbl.proc_signal.blocked));
|
|
||||||
|
|
||||||
collect_sigign_sigcatch (tsk, &sigign, &sigcatch);
|
|
||||||
|
|
||||||
memcpy (&tbl.proc_signal.ignored, &sigign,
|
|
||||||
sizeof (tbl.proc_signal.ignored));
|
|
||||||
|
|
||||||
memcpy (&tbl.proc_signal.caught, &sigcatch,
|
|
||||||
sizeof (tbl.proc_signal.caught));
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
printk ("PROC_SIGNAL: (%lu, %lu) - (%lu, %lu)\n",
|
|
||||||
tbl.proc_signal.ignored.sig [0],
|
|
||||||
tbl.proc_signal.ignored.sig [1],
|
|
||||||
tbl.proc_signal.caught.sig [0],
|
|
||||||
tbl.proc_signal.caught.sig [1]);
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_MEM:
|
|
||||||
if (tsk->mm && tsk->mm != &init_mm) {
|
|
||||||
tbl.proc_mem.context = tsk->mm->context;
|
|
||||||
tbl.proc_mem.start_code = tsk->mm->start_code;
|
|
||||||
tbl.proc_mem.end_code = tsk->mm->end_code;
|
|
||||||
tbl.proc_mem.start_data = tsk->mm-> start_data;
|
|
||||||
tbl.proc_mem.end_data = tsk->mm->end_data;
|
|
||||||
tbl.proc_mem.start_brk = tsk->mm->start_brk;
|
|
||||||
tbl.proc_mem.brk = tsk->mm->brk;
|
|
||||||
tbl.proc_mem.start_stack = tsk->mm->start_stack;
|
|
||||||
tbl.proc_mem.start_mmap = tsk->mm->mmap ?
|
|
||||||
tsk->mm->mmap->vm_start : 0;
|
|
||||||
tbl.proc_mem.arg_start = tsk->mm->arg_start;
|
|
||||||
tbl.proc_mem.arg_end = tsk->mm->arg_end;
|
|
||||||
tbl.proc_mem.env_start = tsk->mm->env_start;
|
|
||||||
tbl.proc_mem.env_end = tsk->mm->env_end;
|
|
||||||
tbl.proc_mem.rss = tsk->mm->rss;
|
|
||||||
tbl.proc_mem.total_vm = tsk->mm->total_vm;
|
|
||||||
tbl.proc_mem.locked_vm = tsk->mm->locked_vm;
|
|
||||||
}
|
|
||||||
tbl.proc_mem.rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_SEGMENT:
|
|
||||||
if (tsk->mm && tsk->mm != &init_mm) {
|
|
||||||
unsigned long vsize = 0;
|
|
||||||
int size = 0, resident = 0, share = 0;
|
|
||||||
int trs = 0, lrs = 0, drs = 0, dt = 0;
|
|
||||||
struct vm_area_struct * vma = tsk->mm->mmap;
|
|
||||||
|
|
||||||
while (vma) {
|
|
||||||
pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start);
|
|
||||||
int pages = 0, shared = 0, dirty = 0, total = 0;
|
|
||||||
|
|
||||||
vsize += vma->vm_end - vma->vm_start;
|
|
||||||
|
|
||||||
statm_pgd_range (pgd, vma->vm_start, vma->vm_end,
|
|
||||||
&pages, &shared, &dirty, &total);
|
|
||||||
resident += pages;
|
|
||||||
share += shared;
|
|
||||||
dt += dirty;
|
|
||||||
size += total;
|
|
||||||
if (vma->vm_flags & VM_EXECUTABLE)
|
|
||||||
trs += pages; /* text */
|
|
||||||
else if (vma->vm_flags & VM_GROWSDOWN)
|
|
||||||
drs += pages; /* stack */
|
|
||||||
else if (vma->vm_end > 0x60000000)
|
|
||||||
lrs += pages; /* library */
|
|
||||||
else
|
|
||||||
drs += pages;
|
|
||||||
vma = vma->vm_next;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbl.proc_segment.vsize = vsize;
|
|
||||||
tbl.proc_segment.size = size;
|
|
||||||
tbl.proc_segment.resident = resident;
|
|
||||||
tbl.proc_segment.shared = share;
|
|
||||||
tbl.proc_segment.trs = trs;
|
|
||||||
tbl.proc_segment.lrs = lrs;
|
|
||||||
tbl.proc_segment.dt = dt;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_TIME:
|
|
||||||
tbl.proc_time.utime = tsk->times.tms_utime;
|
|
||||||
tbl.proc_time.stime = tsk->times.tms_stime;
|
|
||||||
tbl.proc_time.cutime = tsk->times.tms_cutime;
|
|
||||||
tbl.proc_time.cstime = tsk->times.tms_cstime;
|
|
||||||
|
|
||||||
tbl.proc_time.start_time = tsk->start_time;
|
|
||||||
tbl.proc_time.timeout = tsk->timeout;
|
|
||||||
tbl.proc_time.policy = tsk->policy;
|
|
||||||
tbl.proc_time.rt_priority = tsk->rt_priority;
|
|
||||||
|
|
||||||
tbl.proc_time.it_real_value = tsk->it_real_value;
|
|
||||||
tbl.proc_time.it_prof_value = tsk->it_prof_value;
|
|
||||||
tbl.proc_time.it_virt_value = tsk->it_virt_value;
|
|
||||||
tbl.proc_time.it_real_incr = tsk->it_real_incr;
|
|
||||||
tbl.proc_time.it_prof_incr = tsk->it_prof_incr;
|
|
||||||
tbl.proc_time.it_virt_incr = tsk->it_virt_incr;
|
|
||||||
break;
|
|
||||||
case TABLE_PROC_KERNEL:
|
|
||||||
tbl.proc_kernel.min_flt = tsk->min_flt;
|
|
||||||
tbl.proc_kernel.cmin_flt = tsk->cmin_flt;
|
|
||||||
tbl.proc_kernel.maj_flt = tsk->maj_flt;
|
|
||||||
tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt;
|
|
||||||
|
|
||||||
tbl.proc_kernel.kesp = KSTK_EIP(tsk);
|
|
||||||
tbl.proc_kernel.keip = KSTK_ESP(tsk);
|
|
||||||
|
|
||||||
tbl.proc_kernel.nswap = tsk->nswap;
|
|
||||||
tbl.proc_kernel.cnswap = tsk->cnswap;
|
|
||||||
|
|
||||||
tbl.proc_kernel.wchan = get_wchan (tsk);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = verify_area (VERIFY_WRITE, buf, sizeof (struct table));
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
copy_to_user (buf, &tbl, sizeof (union table));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1 +0,0 @@
|
|||||||
#define _TABLE_VERSION 1
|
|
@@ -32,4 +32,3 @@ sysinfo.lo
|
|||||||
uptime.lo
|
uptime.lo
|
||||||
write.lo
|
write.lo
|
||||||
xmalloc.lo
|
xmalloc.lo
|
||||||
lib.c
|
|
||||||
|
@@ -1,20 +1,17 @@
|
|||||||
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
CFLAGS = -Wall -W @CFLAGS@
|
INCLUDES = -I$(top_builddir) -I$(top_srcdir) @machine_incs@ \
|
||||||
|
-I$(top_srcdir)/include -I$(top_srcdir)/intl @GUILE_INCS@ \
|
||||||
|
-DGTOPLOCALEDIR=\"$(datadir)/locale\" -D_GNU_SOURCE
|
||||||
|
|
||||||
|
CFLAGS = -Wall -W @CFLAGS@ -DGTOP_SERVER=\""@LIBGTOP_SERVER@"\"
|
||||||
|
|
||||||
lib_LTLIBRARIES = libgtop.la
|
lib_LTLIBRARIES = libgtop.la
|
||||||
|
|
||||||
libgtop_la_SOURCES = init.c open.c close.c command.c read.c \
|
libgtop_la_SOURCES = init.c open.c close.c read.c read_data.c \
|
||||||
read_data.c write.c lib.c parameter.c \
|
write.c command.c cpu.c mem.c swap.c uptime.c \
|
||||||
sysdeps.c
|
loadavg.c shm_limits.c msg_limits.c \
|
||||||
|
sem_limits.c proclist.c procstate.c procuid.c \
|
||||||
BUILT_SOURCES = lib.c
|
proctime.c procmem.c procsignal.c prockernel.c \
|
||||||
|
procsegment.c
|
||||||
lib.c: lib.awk $(top_builddir)/config.h $(top_srcdir)/features.def
|
|
||||||
$(AWK) -f $(srcdir)/lib.awk < $(top_srcdir)/features.def > lib-t
|
|
||||||
mv lib-t lib.c
|
|
||||||
|
|
||||||
EXTRA_DIST = lib.awk
|
|
||||||
|
|
||||||
CLEANFILES = lib.c
|
|
||||||
|
|
||||||
|
26
lib/close.c
26
lib/close.c
@@ -19,30 +19,14 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/open.h>
|
|
||||||
#include <glibtop/close.h>
|
#include <glibtop/close.h>
|
||||||
#include <glibtop/command.h>
|
|
||||||
|
|
||||||
/* Closes server. */
|
/* Closes pipe to gtop server. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_close_r (glibtop *server)
|
glibtop_close (glibtop *server)
|
||||||
{
|
{
|
||||||
switch (server->method) {
|
kill (server->pid, SIGKILL);
|
||||||
case GLIBTOP_METHOD_UNIX:
|
close (server->input [0]);
|
||||||
case GLIBTOP_METHOD_INET:
|
close (server->output [1]);
|
||||||
glibtop_call_l (server, GLIBTOP_CMND_QUIT,
|
|
||||||
0, NULL, 0, NULL);
|
|
||||||
|
|
||||||
if (close (server->socket))
|
|
||||||
glibtop_warn_io ("close");
|
|
||||||
|
|
||||||
break;
|
|
||||||
case GLIBTOP_METHOD_PIPE:
|
|
||||||
kill (server->pid, SIGKILL);
|
|
||||||
close (server->input [0]);
|
|
||||||
close (server->output [1]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -27,49 +27,28 @@
|
|||||||
#include <glibtop/xmalloc.h>
|
#include <glibtop/xmalloc.h>
|
||||||
|
|
||||||
void *
|
void *
|
||||||
glibtop_call_l (glibtop *server, unsigned command, size_t send_size,
|
glibtop_call__r (glibtop *server, unsigned command, size_t send_size, void *send_buf,
|
||||||
void *send_buf, size_t recv_size, void *recv_buf)
|
size_t recv_size, void *recv_buf)
|
||||||
{
|
{
|
||||||
glibtop_command cmnd;
|
glibtop_command *cmnd;
|
||||||
glibtop_response response;
|
void *ptr;
|
||||||
|
|
||||||
glibtop_init_r (&server, 0, 0);
|
glibtop_init__r (&server);
|
||||||
|
|
||||||
memset (&cmnd, 0, sizeof (glibtop_command));
|
cmnd = glibtop_calloc__r (server, 1, sizeof (glibtop_command));
|
||||||
|
|
||||||
cmnd.command = command;
|
|
||||||
|
|
||||||
/* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we
|
|
||||||
* send it together with command, so we only need one system call instead
|
|
||||||
* of two. */
|
|
||||||
|
|
||||||
if (send_size <= _GLIBTOP_PARAM_SIZE) {
|
|
||||||
memcpy (cmnd.parameter, send_buf, send_size);
|
|
||||||
cmnd.size = send_size;
|
|
||||||
} else {
|
|
||||||
cmnd.data_size = send_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
glibtop_write_l (server, sizeof (glibtop_command), &cmnd);
|
memcpy (&cmnd->server, server, sizeof (glibtop));
|
||||||
|
|
||||||
glibtop_read_l (server, sizeof (glibtop_response), &response);
|
cmnd->command = command;
|
||||||
|
cmnd->size = send_size;
|
||||||
#ifdef DEBUG
|
|
||||||
fprintf (stderr, "RESPONSE: %lu - %d\n",
|
glibtop_write__r (server, sizeof (glibtop_command), cmnd);
|
||||||
response.offset, response.data_size);
|
glibtop_write__r (server, send_size, send_buf);
|
||||||
#endif
|
glibtop_read__r (server, recv_size, recv_buf);
|
||||||
|
|
||||||
if (recv_buf)
|
ptr = glibtop_read_data__r (server);
|
||||||
memcpy (recv_buf, ((char *) &response) + response.offset,
|
|
||||||
recv_size);
|
glibtop_free__r (server, cmnd);
|
||||||
|
|
||||||
if (response.data_size) {
|
return ptr;
|
||||||
void *ptr = glibtop_malloc_r (server, response.data_size);
|
|
||||||
|
|
||||||
glibtop_read_l (server, response.data_size, ptr);
|
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
32
lib/cpu.c
Normal file
32
lib/cpu.c
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop/cpu.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides information about cpu usage. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_cpu__r (glibtop *server, glibtop_cpu *buf)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_CPU, 0, NULL, sizeof (glibtop_cpu), buf);
|
||||||
|
}
|
181
lib/init.c
181
lib/init.c
@@ -20,191 +20,20 @@
|
|||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/xmalloc.h>
|
#include <glibtop/open.h>
|
||||||
#include <glibtop/parameter.h>
|
|
||||||
|
|
||||||
#ifndef DEFAULT_PORT
|
static glibtop _glibtop_global_server;
|
||||||
#define DEFAULT_PORT 42800
|
glibtop *glibtop_global_server = NULL;
|
||||||
#endif
|
|
||||||
|
|
||||||
static glibtop _glibtop_global_server;
|
|
||||||
glibtop *glibtop_global_server = &_glibtop_global_server;
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
_init_server (glibtop *server, const unsigned features)
|
|
||||||
{
|
|
||||||
char *command, *temp;
|
|
||||||
|
|
||||||
/* Try to get server command, but don't override if already
|
|
||||||
* set via glibtop_set_parameter () */
|
|
||||||
|
|
||||||
if (server->server_command == NULL) {
|
|
||||||
const char *temp = getenv ("LIBGTOP_SERVER") ?
|
|
||||||
getenv ("LIBGTOP_SERVER") : LIBGTOP_SERVER;
|
|
||||||
|
|
||||||
server->server_command = glibtop_strdup_r (server, temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (server->server_rsh == NULL) {
|
|
||||||
const char *temp = getenv ("LIBGTOP_RSH") ?
|
|
||||||
getenv ("LIBGTOP_RSH") : "/usr/bin/ssh";
|
|
||||||
|
|
||||||
server->server_rsh = glibtop_strdup_r (server, temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Try to get server method, but don't override if already
|
|
||||||
* set via glibtop_set_parameter () */
|
|
||||||
|
|
||||||
if (server->method) return;
|
|
||||||
|
|
||||||
/* If server->command doesn't start with a colon, then it is
|
|
||||||
* the full pathname of the server executable. */
|
|
||||||
|
|
||||||
if (server->server_command [0] != ':') {
|
|
||||||
if (features & glibtop_server_features) {
|
|
||||||
/* We really need the server. */
|
|
||||||
server->method = GLIBTOP_METHOD_PIPE;
|
|
||||||
} else {
|
|
||||||
/* Fine. No server is needed, so we call the
|
|
||||||
* sysdeps functions directly. */
|
|
||||||
server->method = GLIBTOP_METHOD_DIRECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* If the first character of 'server_command' is a colon,
|
|
||||||
* the first field is the method to connect to the server. */
|
|
||||||
|
|
||||||
/* Everything up to the next colon is the method. */
|
|
||||||
|
|
||||||
command = glibtop_strdup_r (server, server->server_command+1);
|
|
||||||
temp = strstr (command, ":");
|
|
||||||
if (temp) *temp = 0;
|
|
||||||
|
|
||||||
/* Dispatch method. */
|
|
||||||
|
|
||||||
if (!strcmp (command, "direct")) {
|
|
||||||
/* Use sysdeps dir instead of connecting to server
|
|
||||||
* even if using the server would be required on
|
|
||||||
* the current system. */
|
|
||||||
server->method = GLIBTOP_METHOD_DIRECT;
|
|
||||||
|
|
||||||
} else if (!strcmp (command, "inet")) {
|
|
||||||
|
|
||||||
server->method = GLIBTOP_METHOD_INET;
|
|
||||||
|
|
||||||
/* Connect to internet server. */
|
|
||||||
|
|
||||||
if (temp == NULL) {
|
|
||||||
/* If no value was set, we use 'localhost'. */
|
|
||||||
if (server->server_host == NULL)
|
|
||||||
server->server_host = glibtop_strdup_r
|
|
||||||
(server, "localhost");
|
|
||||||
} else {
|
|
||||||
char *temp2 = strstr (temp+1, ":");
|
|
||||||
if (temp2) *temp2 = 0;
|
|
||||||
|
|
||||||
/* Override default. */
|
|
||||||
if (server->server_host)
|
|
||||||
glibtop_free_r (server, (char *) server->server_host);
|
|
||||||
|
|
||||||
server->server_host = glibtop_strdup_r
|
|
||||||
(server, temp+1);
|
|
||||||
|
|
||||||
temp = temp2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (temp == NULL) {
|
|
||||||
/* If no value was set, we use DEFAULT_PORT. */
|
|
||||||
if (server->server_port == 0)
|
|
||||||
server->server_port = DEFAULT_PORT;
|
|
||||||
} else {
|
|
||||||
char *temp2 = strstr (temp+1, ":");
|
|
||||||
if (temp2) *temp2 = 0;
|
|
||||||
|
|
||||||
if (sscanf (temp+1, "%ld", &server->server_port) != 1)
|
|
||||||
server->server_port = DEFAULT_PORT;
|
|
||||||
|
|
||||||
temp = temp2 ? temp2 + 1 : temp2;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (!strcmp (command, "unix")) {
|
|
||||||
|
|
||||||
/* Connect to unix domain socket. */
|
|
||||||
server->method = GLIBTOP_METHOD_UNIX;
|
|
||||||
|
|
||||||
} else if (!strcmp (command, "pipe")) {
|
|
||||||
|
|
||||||
/* Open pipe to server. */
|
|
||||||
server->method = GLIBTOP_METHOD_PIPE;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
glibtop_error_r (server, "Unknown server method '%s'",
|
|
||||||
server->server_command+1);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
glibtop_free_r (server, command);
|
|
||||||
}
|
|
||||||
|
|
||||||
glibtop *
|
glibtop *
|
||||||
glibtop_init_r (glibtop **server_ptr, const unsigned long features,
|
glibtop_init__r (glibtop **server)
|
||||||
const unsigned flags)
|
|
||||||
{
|
|
||||||
glibtop *server;
|
|
||||||
|
|
||||||
if (server_ptr == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (*server_ptr == NULL)
|
|
||||||
*server_ptr = glibtop_global_server;
|
|
||||||
|
|
||||||
server = *server_ptr;
|
|
||||||
|
|
||||||
/* Should we do the initialization? */
|
|
||||||
|
|
||||||
if (flags & GLIBTOP_INIT_NO_INIT)
|
|
||||||
return server;
|
|
||||||
|
|
||||||
/* Do the initialization, but only if not already initialized. */
|
|
||||||
|
|
||||||
if ((server->flags & _GLIBTOP_INIT_STATE_INIT) == 0) {
|
|
||||||
_init_server (server, features);
|
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_INIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Should we open the server? */
|
|
||||||
|
|
||||||
if (flags & GLIBTOP_INIT_NO_OPEN)
|
|
||||||
return server;
|
|
||||||
|
|
||||||
/* Open server, but only if not already opened. */
|
|
||||||
|
|
||||||
if ((server->flags & _GLIBTOP_INIT_STATE_OPEN) == 0)
|
|
||||||
glibtop_open_l (glibtop_global_server, "glibtop",
|
|
||||||
features, flags);
|
|
||||||
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
|
|
||||||
glibtop *
|
|
||||||
glibtop_init_s (glibtop **server, const unsigned long features,
|
|
||||||
const unsigned flags)
|
|
||||||
{
|
{
|
||||||
if (*server != NULL)
|
if (*server != NULL)
|
||||||
return *server;
|
return *server;
|
||||||
|
|
||||||
fprintf (stderr, "DEBUG: %s (%d)\n", __FILE__, __LINE__);
|
|
||||||
|
|
||||||
if (glibtop_global_server == NULL) {
|
if (glibtop_global_server == NULL) {
|
||||||
glibtop_global_server = &_glibtop_global_server;
|
glibtop_global_server = &_glibtop_global_server;
|
||||||
glibtop_open_s (glibtop_global_server, "glibtop",
|
glibtop_open (glibtop_global_server, "glibtop");
|
||||||
features, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return *server = glibtop_global_server;
|
return *server = glibtop_global_server;
|
||||||
|
97
lib/lib.awk
97
lib/lib.awk
@@ -1,97 +0,0 @@
|
|||||||
BEGIN {
|
|
||||||
print "/* lib.c */";
|
|
||||||
print "/* This is a generated file. Please modify `lib.awk' */";
|
|
||||||
print "";
|
|
||||||
|
|
||||||
print "#include <glibtop.h>";
|
|
||||||
print "#include <glibtop/open.h>";
|
|
||||||
print "#include <glibtop/sysdeps.h>";
|
|
||||||
print "#include <glibtop/command.h>";
|
|
||||||
|
|
||||||
print "";
|
|
||||||
}
|
|
||||||
|
|
||||||
function output(line) {
|
|
||||||
split (line, line_fields, /\|/);
|
|
||||||
retval = line_fields[1];
|
|
||||||
feature = line_fields[2];
|
|
||||||
param_typ = line_fields[4];
|
|
||||||
param = line_fields[5];
|
|
||||||
param_size = line_fields[6];
|
|
||||||
|
|
||||||
if (param_typ == "") {
|
|
||||||
param_size = "0";
|
|
||||||
param_ptr = "NULL";
|
|
||||||
} else {
|
|
||||||
if (param_size == "")
|
|
||||||
param_size = "sizeof ("param_typ")";
|
|
||||||
|
|
||||||
if (param_typ ~ /*/)
|
|
||||||
param_ptr = param;
|
|
||||||
else
|
|
||||||
param_ptr = "&"param;
|
|
||||||
}
|
|
||||||
|
|
||||||
orig = feature; sub(/^@/,"",feature);
|
|
||||||
space = feature; gsub(/./," ",space);
|
|
||||||
|
|
||||||
print retval;
|
|
||||||
if (retval !~ /^void$/) {
|
|
||||||
prefix = "return ";
|
|
||||||
prefix_space = " ";
|
|
||||||
} else {
|
|
||||||
prefix = "";
|
|
||||||
prefix_space = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (param_typ != "") {
|
|
||||||
print "glibtop_get_"feature"_l (glibtop *server, glibtop_"feature" *buf,";
|
|
||||||
print " "space" "param_typ" "param")";
|
|
||||||
} else {
|
|
||||||
print "glibtop_get_"feature"_l (glibtop *server, glibtop_"feature" *buf)";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "{";
|
|
||||||
print "\tglibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_"toupper(feature)"), 0);";
|
|
||||||
print "";
|
|
||||||
print "\tif ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&";
|
|
||||||
print "\t (server->features & (1 << GLIBTOP_SYSDEPS_"toupper(feature)")))";
|
|
||||||
print "\t{";
|
|
||||||
|
|
||||||
if (param == "")
|
|
||||||
print "\t\t"prefix"glibtop_call_l (server, GLIBTOP_CMND_"toupper(feature)", 0, NULL,";
|
|
||||||
else
|
|
||||||
print "\t\t"prefix"glibtop_call_l (server, GLIBTOP_CMND_"toupper(feature)",";
|
|
||||||
|
|
||||||
if (param == "") {
|
|
||||||
print "\t\t\t\t"prefix_space"sizeof (glibtop_"feature"), buf);";
|
|
||||||
} else {
|
|
||||||
print "\t\t\t\t"prefix_space""param_size", "param_ptr",";
|
|
||||||
print "\t\t\t\t"prefix_space"sizeof (glibtop_"feature"),";
|
|
||||||
print "\t\t\t\t"prefix_space"buf);";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "\t} else {";
|
|
||||||
|
|
||||||
if (orig !~ /^@/)
|
|
||||||
print "#if (!GLIBTOP_SUID_"toupper(feature)")";
|
|
||||||
|
|
||||||
if (param == "")
|
|
||||||
print "\t\t"prefix"glibtop_get_"feature"_r (server, buf);";
|
|
||||||
else
|
|
||||||
print "\t\t"prefix"glibtop_get_"feature"_r (server, buf, "param");";
|
|
||||||
|
|
||||||
if (orig !~ /^@/) {
|
|
||||||
print "#else";
|
|
||||||
print "\t\terrno = ENOSYS;";
|
|
||||||
print "\t\tglibtop_error_io_r (server, \"glibtop_get_"feature"\");";
|
|
||||||
print "#endif";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "\t}";
|
|
||||||
print "}";
|
|
||||||
print "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/^[^#]/ { output($0) }
|
|
||||||
|
|
33
lib/loadavg.c
Normal file
33
lib/loadavg.c
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
#include <glibtop/loadavg.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides load averange. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_loadavg__r (glibtop *server, glibtop_loadavg *buf)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_LOADAVG, 0, NULL, sizeof (glibtop_loadavg), buf);
|
||||||
|
}
|
32
lib/mem.c
Normal file
32
lib/mem.c
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop/mem.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides information about memory usage. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_mem__r (glibtop *server, glibtop_mem *buf)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_MEM, 0, NULL, sizeof (glibtop_mem), buf);
|
||||||
|
}
|
32
lib/msg_limits.c
Normal file
32
lib/msg_limits.c
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop/msg_limits.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides information about sysv ipc limits. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_msg_limits__r (glibtop *server, glibtop_msg_limits *buf)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_MSG_LIMITS, 0, NULL, sizeof (glibtop_msg_limits), buf);
|
||||||
|
}
|
159
lib/open.c
159
lib/open.c
@@ -19,157 +19,42 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/open.h>
|
#include <glibtop/open.h>
|
||||||
#include <glibtop/sysdeps.h>
|
|
||||||
#include <glibtop/command.h>
|
|
||||||
#include <glibtop/xmalloc.h>
|
|
||||||
|
|
||||||
#include <glibtop/gnuserv.h>
|
|
||||||
|
|
||||||
/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */
|
/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_open_l (glibtop *server, const char *program_name,
|
glibtop_open (glibtop *server, const char *program_name)
|
||||||
const unsigned long features, const unsigned flags)
|
|
||||||
{
|
{
|
||||||
char version [BUFSIZ], buffer [BUFSIZ];
|
char version [BUFSIZ], buffer [BUFSIZ];
|
||||||
int connect_type;
|
|
||||||
unsigned nbytes;
|
memset (server, 0, sizeof (glibtop));
|
||||||
|
|
||||||
server->name = program_name;
|
server->name = program_name;
|
||||||
|
|
||||||
/* It is important to set _GLIBTOP_INIT_STATE_OPEN here when we
|
if (pipe (server->input) || pipe (server->output))
|
||||||
* do recursive calls to glibtop_init_r (). */
|
glibtop_error__r (server, _("cannot make a pipe: %s\n"), strerror (errno));
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_OPEN;
|
server->pid = fork ();
|
||||||
|
|
||||||
if (flags & GLIBTOP_FEATURES_EXCEPT)
|
if (server->pid < 0) {
|
||||||
features = ~features & GLIBTOP_SYSDEPS_ALL;
|
glibtop_error__r (server, _("%s: fork failed: %s\n"), strerror (errno));
|
||||||
|
} else if (server->pid == 0) {
|
||||||
if (features == 0)
|
close (0); close (1); /* close (2); */
|
||||||
features = GLIBTOP_SYSDEPS_ALL;
|
close (server->input [0]); close (server->output [1]);
|
||||||
|
dup2 (server->input [1], 1); /* dup2 (server->input [1], 2); */
|
||||||
if (flags & GLIBTOP_FEATURES_NO_SERVER) {
|
dup2 (server->output [0], 0);
|
||||||
server->method = GLIBTOP_METHOD_DIRECT;
|
execl (GTOP_SERVER, NULL);
|
||||||
features = 0;
|
_exit (2);
|
||||||
}
|
|
||||||
|
|
||||||
server->features = features;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
fprintf (stderr, "SIZEOF: %u - %u - %u - %u - %u - %u\n",
|
|
||||||
sizeof (glibtop_command), sizeof (glibtop_response),
|
|
||||||
sizeof (glibtop_mountentry), sizeof (glibtop_union),
|
|
||||||
sizeof (glibtop_sysdeps), sizeof (glibtop_response_union));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (server->method) {
|
|
||||||
case GLIBTOP_METHOD_PIPE:
|
|
||||||
case GLIBTOP_METHOD_UNIX:
|
|
||||||
if (glibtop_server_features & features)
|
|
||||||
break;
|
|
||||||
|
|
||||||
fprintf (stderr, "Using the server is not required.\n");
|
|
||||||
|
|
||||||
server->method = GLIBTOP_METHOD_DIRECT;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (server->method) {
|
close (server->input [1]);
|
||||||
case GLIBTOP_METHOD_DIRECT:
|
close (server->output [0]);
|
||||||
server->features = 0;
|
|
||||||
break;
|
|
||||||
case GLIBTOP_METHOD_INET:
|
|
||||||
fprintf (stderr, "Connecting to '%s' port %ld.\n",
|
|
||||||
server->server_host, server->server_port);
|
|
||||||
|
|
||||||
connect_type = glibtop_make_connection
|
|
||||||
(server->server_host, server->server_port,
|
|
||||||
&server->socket);
|
|
||||||
|
|
||||||
fprintf (stderr, "Connect Type is %d.\n", connect_type);
|
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_SERVER;
|
|
||||||
|
|
||||||
server->features = -1;
|
|
||||||
break;
|
|
||||||
case GLIBTOP_METHOD_UNIX:
|
|
||||||
fprintf (stderr, "Connecting to Unix Domain Socket.\n");
|
|
||||||
|
|
||||||
connect_type = glibtop_make_connection
|
sprintf (version, "%s server %s ready.\n", PACKAGE, VERSION);
|
||||||
("unix", 0, &server->socket);
|
|
||||||
|
|
||||||
fprintf (stderr, "Connect Type is %d.\n", connect_type);
|
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_SERVER;
|
glibtop_read__r (server, strlen (version), buffer);
|
||||||
|
|
||||||
server->features = -1;
|
if (memcmp (version, buffer, strlen (version)))
|
||||||
break;
|
glibtop_error__r (server, _("server version is not %s"), VERSION);
|
||||||
case GLIBTOP_METHOD_PIPE:
|
|
||||||
fprintf (stderr, "Opening pipe to server (%s).\n",
|
|
||||||
LIBGTOP_SERVER);
|
|
||||||
|
|
||||||
if (pipe (server->input) || pipe (server->output))
|
|
||||||
glibtop_error_io_r (server, "cannot make a pipe");
|
|
||||||
|
|
||||||
server->pid = fork ();
|
|
||||||
|
|
||||||
if (server->pid < 0) {
|
|
||||||
glibtop_error_io_r (server, "fork failed");
|
|
||||||
} else if (server->pid == 0) {
|
|
||||||
close (0); close (1);
|
|
||||||
close (server->input [0]); close (server->output [1]);
|
|
||||||
dup2 (server->input [1], 1);
|
|
||||||
dup2 (server->output [0], 0);
|
|
||||||
execl (LIBGTOP_SERVER, NULL);
|
|
||||||
glibtop_error_io_r (server, "execl (%s)",
|
|
||||||
LIBGTOP_SERVER);
|
|
||||||
_exit (2);
|
|
||||||
}
|
|
||||||
|
|
||||||
close (server->input [1]);
|
|
||||||
close (server->output [0]);
|
|
||||||
|
|
||||||
sprintf (version, "libgtop server %s ready.\n",
|
|
||||||
LIBGTOP_VERSION);
|
|
||||||
|
|
||||||
glibtop_read_l (server, sizeof (nbytes), &nbytes);
|
|
||||||
|
|
||||||
if (nbytes != strlen (version))
|
|
||||||
glibtop_error_r (server, "Requested %u bytes but got %u",
|
|
||||||
strlen (version), nbytes);
|
|
||||||
|
|
||||||
glibtop_read_l (server, nbytes, buffer);
|
|
||||||
|
|
||||||
if (memcmp (version, buffer, strlen (version)))
|
|
||||||
glibtop_error_r (server, "server version is not %s",
|
|
||||||
LIBGTOP_VERSION);
|
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_SERVER;
|
|
||||||
|
|
||||||
server->features = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the server has been started, ask it for its features. */
|
|
||||||
|
|
||||||
if (server->flags & _GLIBTOP_INIT_STATE_SERVER) {
|
|
||||||
glibtop_sysdeps sysdeps;
|
|
||||||
|
|
||||||
glibtop_call_l (server, GLIBTOP_CMND_SYSDEPS, 0, NULL,
|
|
||||||
sizeof (glibtop_sysdeps), &sysdeps);
|
|
||||||
|
|
||||||
server->features = sysdeps.features;
|
|
||||||
|
|
||||||
fprintf (stderr, "Server features are %lu.\n",
|
|
||||||
server->features);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In any case, we call the open functions of our own sysdeps
|
|
||||||
* directory. */
|
|
||||||
|
|
||||||
fprintf (stderr, "Calling sysdeps open function.\n");
|
|
||||||
|
|
||||||
glibtop_open_s (server, program_name, features, flags);
|
|
||||||
}
|
}
|
||||||
|
@@ -1,80 +0,0 @@
|
|||||||
/* $Id$ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
This file is part of the Gnome Top Library.
|
|
||||||
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
|
||||||
|
|
||||||
The Gnome Top Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The Gnome Top Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#include <glibtop.h>
|
|
||||||
#include <glibtop/parameter.h>
|
|
||||||
|
|
||||||
#define _write_data(ptr,size) \
|
|
||||||
if ((data_ptr == NULL) || (data_size < size)) return -size; \
|
|
||||||
if (ptr == NULL) { strcpy (data_ptr, ""); return 1; } \
|
|
||||||
memcpy (data_ptr, ptr, size); \
|
|
||||||
return size;
|
|
||||||
|
|
||||||
#define _check_data(size) \
|
|
||||||
if ((data_ptr == NULL) || (data_size != size)) { \
|
|
||||||
glibtop_error_r (server, "glibtop_set_parameter (%d): " \
|
|
||||||
"Expected %lu bytes but got %lu.", \
|
|
||||||
parameter, size, data_size); \
|
|
||||||
return; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define _strlen(ptr) (ptr ? strlen (ptr) : 0)
|
|
||||||
|
|
||||||
size_t
|
|
||||||
glibtop_get_parameter_l (glibtop *server, const unsigned parameter,
|
|
||||||
void *data_ptr, size_t data_size)
|
|
||||||
{
|
|
||||||
switch (parameter) {
|
|
||||||
case GLIBTOP_PARAM_METHOD:
|
|
||||||
_write_data (&server->method,
|
|
||||||
sizeof (server->method));
|
|
||||||
case GLIBTOP_PARAM_FEATURES:
|
|
||||||
_write_data (&server->features,
|
|
||||||
sizeof (server->features));
|
|
||||||
case GLIBTOP_PARAM_COMMAND:
|
|
||||||
_write_data (server->server_command,
|
|
||||||
_strlen(server->server_command));
|
|
||||||
case GLIBTOP_PARAM_HOST:
|
|
||||||
_write_data (server->server_host,
|
|
||||||
_strlen(server->server_host));
|
|
||||||
case GLIBTOP_PARAM_PORT:
|
|
||||||
_write_data (&server->server_port,
|
|
||||||
sizeof (server->server_port));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
glibtop_set_parameter_l (glibtop *server, const unsigned parameter,
|
|
||||||
const void *data_ptr, size_t data_size)
|
|
||||||
{
|
|
||||||
switch (parameter) {
|
|
||||||
case GLIBTOP_PARAM_METHOD:
|
|
||||||
_check_data (sizeof (server->method));
|
|
||||||
memcpy (&server->method, data_ptr, data_size);
|
|
||||||
break;
|
|
||||||
case GLIBTOP_PARAM_FEATURES:
|
|
||||||
_check_data (sizeof (server->features));
|
|
||||||
memcpy (&server->features, data_ptr, data_size);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
35
lib/prockernel.c
Normal file
35
lib/prockernel.c
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/prockernel.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_proc_kernel__r (glibtop *server, glibtop_proc_kernel *buf,
|
||||||
|
pid_t pid)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_KERNEL, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_kernel), buf);
|
||||||
|
}
|
32
lib/proclist.c
Normal file
32
lib/proclist.c
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop/proclist.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Fetch list of currently running processes. */
|
||||||
|
|
||||||
|
unsigned *
|
||||||
|
glibtop_get_proclist__r (glibtop *server, glibtop_proclist *buf)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
return glibtop_call__r (server, GLIBTOP_CMND_PROCLIST, 0, NULL, sizeof (glibtop_proclist), buf);
|
||||||
|
}
|
35
lib/procmem.c
Normal file
35
lib/procmem.c
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/procmem.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_proc_mem__r (glibtop *server, glibtop_proc_mem *buf,
|
||||||
|
pid_t pid)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_MEM, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_mem), buf);
|
||||||
|
}
|
35
lib/procsegment.c
Normal file
35
lib/procsegment.c
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/procsegment.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_proc_segment__r (glibtop *server, glibtop_proc_segment *buf,
|
||||||
|
pid_t pid)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_SEGMENT, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_segment), buf);
|
||||||
|
}
|
35
lib/procsignal.c
Normal file
35
lib/procsignal.c
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/procsignal.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_proc_signal__r (glibtop *server, glibtop_proc_signal *buf,
|
||||||
|
pid_t pid)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_SIGNAL, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_signal), buf);
|
||||||
|
}
|
35
lib/procstate.c
Normal file
35
lib/procstate.c
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the Gnome Top Library.
|
||||||
|
Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.
|
||||||
|
|
||||||
|
The Gnome Top Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Gnome Top Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/procstate.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_get_proc_state__r (glibtop *server, glibtop_proc_state *buf,
|
||||||
|
pid_t pid)
|
||||||
|
{
|
||||||
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_STATE, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_state), buf);
|
||||||
|
}
|
@@ -19,8 +19,9 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <config.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/proctime.h>
|
#include <glibtop/proctime.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
/* Provides detailed information about a process. */
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
@@ -28,5 +29,7 @@ void
|
|||||||
glibtop_get_proc_time__r (glibtop *server, glibtop_proc_time *buf,
|
glibtop_get_proc_time__r (glibtop *server, glibtop_proc_time *buf,
|
||||||
pid_t pid)
|
pid_t pid)
|
||||||
{
|
{
|
||||||
memset (buf, 0, sizeof (glibtop_proc_time));
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_TIME, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_time), buf);
|
||||||
}
|
}
|
@@ -19,8 +19,9 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <config.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/procuid.h>
|
#include <glibtop/procuid.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
/* Provides detailed information about a process. */
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
@@ -28,5 +29,7 @@ void
|
|||||||
glibtop_get_proc_uid__r (glibtop *server, glibtop_proc_uid *buf,
|
glibtop_get_proc_uid__r (glibtop *server, glibtop_proc_uid *buf,
|
||||||
pid_t pid)
|
pid_t pid)
|
||||||
{
|
{
|
||||||
memset (buf, 0, sizeof (glibtop_proc_uid));
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_PROC_UID, sizeof (pid_t),
|
||||||
|
&pid, sizeof (glibtop_proc_uid), buf);
|
||||||
}
|
}
|
53
lib/read.c
53
lib/read.c
@@ -23,48 +23,19 @@
|
|||||||
|
|
||||||
/* Reads some data from server. */
|
/* Reads some data from server. */
|
||||||
|
|
||||||
static void
|
|
||||||
do_read (int s, void *ptr, size_t total_size)
|
|
||||||
{
|
|
||||||
int nread;
|
|
||||||
size_t already_read = 0, remaining = total_size;
|
|
||||||
|
|
||||||
while (already_read < total_size) {
|
|
||||||
nread = recv (s, ptr, remaining, 0);
|
|
||||||
|
|
||||||
if (nread == 0) {
|
|
||||||
close (s);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nread <= 0) {
|
|
||||||
glibtop_error_io ("recv");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
already_read += nread;
|
|
||||||
remaining -= nread;
|
|
||||||
(char *) ptr += nread;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_read_l (glibtop *server, size_t size, void *buf)
|
glibtop_read__r (glibtop *server, size_t size, void *buf)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
size_t ssize;
|
||||||
|
|
||||||
glibtop_init_r (&server, 0, 0);
|
glibtop_init__r (&server);
|
||||||
|
|
||||||
#ifdef DEBUG
|
if (read (server->input [0], &ssize, sizeof (size_t)) < 0)
|
||||||
fprintf (stderr, "LIBRARY: really reading %d bytes.\n", size);
|
glibtop_error__r (server, _("read size: %s"), strerror (errno));
|
||||||
#endif
|
|
||||||
|
if (size != ssize)
|
||||||
if (server->socket) {
|
glibtop_error__r (server, _("got %d bytes but requested %d"), ssize, size);
|
||||||
do_read (server->socket, buf, size);
|
|
||||||
} else {
|
if (read (server->input [0], buf, size) < 0)
|
||||||
ret = read (server->input [0], buf, size);
|
glibtop_error__r (server, _("read %d bytes: %s"), size, strerror (errno));
|
||||||
}
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
glibtop_error_io_r (server, _("read %d bytes"), size);
|
|
||||||
}
|
}
|
||||||
|
@@ -25,43 +25,24 @@
|
|||||||
/* Reads some data from server. */
|
/* Reads some data from server. */
|
||||||
|
|
||||||
void *
|
void *
|
||||||
glibtop_read_data_l (glibtop *server)
|
glibtop_read_data__r (glibtop *server)
|
||||||
{
|
{
|
||||||
size_t size;
|
size_t size;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int ret;
|
|
||||||
|
|
||||||
glibtop_init_r (&server, 0, 0);
|
glibtop_init__r (&server);
|
||||||
|
|
||||||
#ifdef DEBUG
|
if (read (server->input [0], &size, sizeof (size_t)) < 0)
|
||||||
fprintf (stderr, "LIBRARY: reading %d data bytes.\n", sizeof (size_t));
|
glibtop_error__r (server, _("read data size: %s"), strerror (errno));
|
||||||
#endif
|
|
||||||
|
|
||||||
if (server->socket) {
|
|
||||||
ret = recv (server->socket, &size, sizeof (size_t), 0);
|
|
||||||
} else {
|
|
||||||
ret = read (server->input [0], &size, sizeof (size_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
glibtop_error_io_r (server, _("read data size"));
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
fprintf (stderr, "LIBRARY: really reading %d data bytes (ret = %d).\n", size, ret);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!size) return NULL;
|
if (!size) return NULL;
|
||||||
|
|
||||||
ptr = glibtop_malloc_r (server, size);
|
fprintf (stderr, "Server has %d bytes of data.\n", size);
|
||||||
|
|
||||||
if (server->socket) {
|
ptr = glibtop_malloc__r (server, size);
|
||||||
ret = recv (server->socket, ptr, size, 0);
|
|
||||||
} else {
|
if (read (server->input [0], ptr, size) < 0)
|
||||||
ret = read (server->input [0], ptr, size);
|
glibtop_error__r (server, _("read data %d bytes: %s"), size, strerror (errno));
|
||||||
}
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
glibtop_error_io_r (server, _("read data %d bytes"));
|
|
||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
@@ -20,11 +20,13 @@
|
|||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <glibtop/sem_limits.h>
|
#include <glibtop/sem_limits.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
/* Provides information about sysv sem limits. */
|
/* Provides information about sysv ipc limits. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_sem_limits__r (glibtop *server, glibtop_sem_limits *buf)
|
glibtop_get_sem_limits__r (glibtop *server, glibtop_sem_limits *buf)
|
||||||
{
|
{
|
||||||
memset (buf, 0, sizeof (glibtop_sem_limits));
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_SEM_LIMITS, 0, NULL, sizeof (glibtop_sem_limits), buf);
|
||||||
}
|
}
|
@@ -20,11 +20,13 @@
|
|||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <glibtop/shm_limits.h>
|
#include <glibtop/shm_limits.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
/* Provides information about sysv ipc limits. */
|
/* Provides information about sysv ipc limits. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_shm_limits__r (glibtop *server, glibtop_shm_limits *buf)
|
glibtop_get_shm_limits__r (glibtop *server, glibtop_shm_limits *buf)
|
||||||
{
|
{
|
||||||
memset (buf, 0, sizeof (glibtop_shm_limits));
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_SHM_LIMITS, 0, NULL, sizeof (glibtop_shm_limits), buf);
|
||||||
}
|
}
|
@@ -19,13 +19,14 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
#include <glibtop/swap.h>
|
#include <glibtop/swap.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
/* Provides information about swap usage. */
|
/* Provides information about swap usage. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_swap__r (glibtop *server, glibtop_swap *buf)
|
glibtop_get_swap__r (glibtop *server, glibtop_swap *buf)
|
||||||
{
|
{
|
||||||
memset (buf, 0, sizeof (glibtop_swap));
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_SWAP, 0, NULL, sizeof (glibtop_swap), buf);
|
||||||
}
|
}
|
@@ -21,11 +21,13 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <glibtop/uptime.h>
|
#include <glibtop/uptime.h>
|
||||||
|
#include <glibtop/command.h>
|
||||||
|
|
||||||
/* Provides uptime and idle time. */
|
/* Provides uptime and idle time. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_uptime__r (glibtop *server, glibtop_uptime *buf)
|
glibtop_get_uptime__r (glibtop *server, glibtop_uptime *buf)
|
||||||
{
|
{
|
||||||
memset (buf, 0, sizeof (glibtop_uptime));
|
glibtop_init__r (&server);
|
||||||
|
glibtop_call__r (server, GLIBTOP_CMND_UPTIME, 0, NULL, sizeof (glibtop_uptime), buf);
|
||||||
}
|
}
|
25
lib/write.c
25
lib/write.c
@@ -24,24 +24,15 @@
|
|||||||
/* Writes some data to server. */
|
/* Writes some data to server. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_write_l (glibtop *server, size_t size, void *buf)
|
glibtop_write__r (glibtop *server, size_t size, void *buf)
|
||||||
{
|
{
|
||||||
int ret;
|
glibtop_init__r (&server);
|
||||||
|
|
||||||
glibtop_init_r (&server, 0, 0);
|
if (write (server->output [1], &size, sizeof (size_t)) < 0)
|
||||||
|
glibtop_error__r (server, _("write size: %s"), strerror (errno));
|
||||||
|
|
||||||
if (size == 0) return;
|
if (!size) return;
|
||||||
|
|
||||||
#ifdef DEBUG
|
if (write (server->output [1], buf, size) < 0)
|
||||||
fprintf (stderr, "LIBRARY: really writing %d bytes.\n", size);
|
glibtop_error__r (server, _("write %d bytes: %s"), size, strerror (errno));
|
||||||
#endif
|
|
||||||
|
|
||||||
if (server->socket) {
|
|
||||||
ret = send (server->socket, buf, size, 0);
|
|
||||||
} else {
|
|
||||||
ret = write (server->output [1], buf, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret < 0)
|
|
||||||
glibtop_error_io_r (server, _("write %d bytes"), size);
|
|
||||||
}
|
}
|
||||||
|
70
libgtop.spec
70
libgtop.spec
@@ -3,32 +3,39 @@
|
|||||||
%define rel SNAP
|
%define rel SNAP
|
||||||
%define prefix /usr
|
%define prefix /usr
|
||||||
|
|
||||||
Summary: libgtop library
|
Summary: GNOME Top Library
|
||||||
Name: libgtop
|
Name: libgtop
|
||||||
Version: %ver
|
Version: %ver
|
||||||
Release: %rel
|
Release: %rel
|
||||||
Copyright: LGPL
|
Copyright: LGPL
|
||||||
Group: X11/Libraries
|
Group: X11/gnome
|
||||||
Source: ftp://ftp.gnome.org/pub/libgtop-%{ver}.tar.gz
|
Source: ftp://ftp.gnome.org/pub/libgtop-%{ver}.tar.gz
|
||||||
BuildRoot: /tmp/libgtop-root
|
BuildRoot: /tmp/libgtop-root
|
||||||
Packager: Michael Fulbright <msf@redhat.com>
|
Obsoletes: gnome
|
||||||
URL: http://www.gnome.org
|
Packager: Marc Ewing <marc@redhat.com>
|
||||||
Prereq: /sbin/install-info
|
URL: http://www.gnome.org/
|
||||||
Docdir: %{prefix}/doc
|
Docdir: %{prefix}/doc
|
||||||
|
|
||||||
%description
|
%description
|
||||||
|
Library that fetches information about the running system such as cpu
|
||||||
|
and memory usage, active processes etc. On Linux systems, these information
|
||||||
|
are taken directly from the /proc filesystem. For other systems such as
|
||||||
|
Solaris, where such programs need to be suid root (or only setgid kmem/mem
|
||||||
|
on some systems), it provides a suid/setgid server that fetches those
|
||||||
|
information and a client-side library that talks to this server.
|
||||||
|
|
||||||
A library that fetches
|
Main idea was to have the same interface for all operating systems,
|
||||||
information about the running system such as cpu and memory usage,
|
thus all system dependent details are hidden in the implementation
|
||||||
active processes etc. On Linux systems, these information are taken
|
of that server.
|
||||||
directly from the /proc filesystem.
|
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Libraries, includes, etc to use libgtop in GNOME applications
|
||||||
|
Group: X11/gnome
|
||||||
|
Requires: libgtop
|
||||||
|
Obsoletes: gnome
|
||||||
|
|
||||||
%changelog
|
%description devel
|
||||||
|
Libraries, include files, etc you need to use libgtop in GNOME applications.
|
||||||
* Tue Jun 2 1998 Michael Fulbright <msf@redhat.com>
|
|
||||||
|
|
||||||
- first version of the RPM
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup
|
%setup
|
||||||
@@ -36,9 +43,9 @@ directly from the /proc filesystem.
|
|||||||
%build
|
%build
|
||||||
# Needed for snapshot releases.
|
# Needed for snapshot releases.
|
||||||
if [ ! -f configure ]; then
|
if [ ! -f configure ]; then
|
||||||
CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%prefix --disable-libgtop-examples
|
CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%prefix
|
||||||
else
|
else
|
||||||
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%prefix --disable-libgtop-examples
|
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%prefix
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SMP" != "" ]; then
|
if [ "$SMP" != "" ]; then
|
||||||
@@ -53,29 +60,30 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
|
|
||||||
make prefix=$RPM_BUILD_ROOT%{prefix} install
|
make prefix=$RPM_BUILD_ROOT%{prefix} install
|
||||||
|
|
||||||
#
|
|
||||||
# msf - remove these as they are really supposed to come from gnome-libs
|
|
||||||
#
|
|
||||||
rm -f $RPM_BUILD_ROOT/%{prefix}/lib/libgnomesupport.a
|
|
||||||
rm -f $RPM_BUILD_ROOT/%{prefix}/lib/libgnomesupport.la
|
|
||||||
rm -f $RPM_BUILD_ROOT/%{prefix}/lib/libgnomesupport.so.0
|
|
||||||
rm -f $RPM_BUILD_ROOT/%{prefix}/lib/libgnomesupport.so.0.0.0
|
|
||||||
|
|
||||||
rm -fr $RPM_BUILD_ROOT/%{prefix}/include/libgtop
|
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
#rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%post -p /sbin/ldconfig
|
%post
|
||||||
|
if ! grep %{prefix}/lib /etc/ld.so.conf > /dev/null ; then
|
||||||
|
echo "%{prefix}/lib" >> /etc/ld.so.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
%postun -p /sbin/ldconfig
|
%postun -p /sbin/ldconfig
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
|
|
||||||
%doc ANNOUNCE AUTHORS ChangeLog NEWS README README.LATEST copyright.txt doc
|
%doc AUTHORS COPYING ChangeLog NEWS README
|
||||||
%{prefix}/bin/*
|
|
||||||
%{prefix}/lib/lib*.so.*
|
%{prefix}/lib/lib*.so.*
|
||||||
%{prefix}/lib/libgtopConf.sh
|
%{prefix}/bin/*
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%defattr(-, root, root)
|
||||||
|
|
||||||
|
%{prefix}/lib/lib*.so
|
||||||
%{prefix}/lib/*a
|
%{prefix}/lib/*a
|
||||||
|
%{prefix}/lib/*.sh
|
||||||
|
%{prefix}/lib/libgtop
|
||||||
%{prefix}/include/*
|
%{prefix}/include/*
|
||||||
|
@@ -8,26 +8,18 @@ LIBGTOP_INCLUDEDIR="@LIBGTOP_INCLUDEDIR@"
|
|||||||
LIBGTOP_LIBS="@LIBGTOP_LIBS@"
|
LIBGTOP_LIBS="@LIBGTOP_LIBS@"
|
||||||
LIBGTOP_INCS="@LIBGTOP_INCS@"
|
LIBGTOP_INCS="@LIBGTOP_INCS@"
|
||||||
|
|
||||||
LIBGTOP_NAMES_LIBS="@LIBGTOP_NAMES_LIBS@"
|
|
||||||
LIBGTOP_NAMES_INCS="@LIBGTOP_NAMES_INCS@"
|
|
||||||
|
|
||||||
LIBGTOP_GUILE_LIBS="@LIBGTOP_GUILE_LIBS@"
|
LIBGTOP_GUILE_LIBS="@LIBGTOP_GUILE_LIBS@"
|
||||||
LIBGTOP_GUILE_INCS="@LIBGTOP_GUILE_INCS@"
|
LIBGTOP_GUILE_INCS="@LIBGTOP_GUILE_INCS@"
|
||||||
|
|
||||||
LIBGTOP_GUILE_NAMES_LIBS="@LIBGTOP_GUILE_NAMES_LIBS@"
|
|
||||||
LIBGTOP_GUILE_NAMES_INCS="@LIBGTOP_GUILE_NAMES_INCS@"
|
|
||||||
|
|
||||||
LIBGTOP_BINDIR="@LIBGTOP_BINDIR@"
|
LIBGTOP_BINDIR="@LIBGTOP_BINDIR@"
|
||||||
LIBGTOP_SERVER="@LIBGTOP_SERVER@"
|
LIBGTOP_SERVER="@LIBGTOP_SERVER@"
|
||||||
|
|
||||||
LIBGTOP_MAJOR_VERSION="@LIBGTOP_MAJOR_VERSION@"
|
|
||||||
LIBGTOP_MINOR_VERSION="@LIBGTOP_MINOR_VERSION@"
|
|
||||||
LIBGTOP_VERSION="@LIBGTOP_VERSION@"
|
|
||||||
|
|
||||||
libgtop_sysdeps_dir="@libgtop_sysdeps_dir@"
|
libgtop_sysdeps_dir="@libgtop_sysdeps_dir@"
|
||||||
libgtop_need_server="@libgtop_need_server@"
|
libgtop_need_server="@libgtop_need_server@"
|
||||||
libgtop_use_machine_h="@libgtop_use_machine_h@"
|
libgtop_use_machine_h="@libgtop_use_machine_h@"
|
||||||
|
|
||||||
libgtop_guile_found="@libgtop_guile_found@"
|
libgtop_guile_found="@libgtop_guile_found@"
|
||||||
|
|
||||||
|
libgtop_want_names="@libgtop_want_names@"
|
||||||
|
libgtop_want_guile_names="@libgtop_want_guile_names@"
|
||||||
libgtop_want_examples="@libgtop_want_examples@"
|
libgtop_want_examples="@libgtop_want_examples@"
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user