diff options
author | Martin Baulig <martin@src.gnome.org> | 1998-06-18 19:06:55 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 1998-06-18 19:06:55 +0000 |
commit | 71187a5e519bd03926c933c57e307f29b07e77c6 (patch) | |
tree | 44810abf5421d1aeec10ceb94d2dc32052d268ae | |
parent | b54a5d2dfdce076438da84046b4d0589cbaece36 (diff) | |
download | libgtop-71187a5e519bd03926c933c57e307f29b07e77c6.tar.gz |
Some more daemon stuff.
-rw-r--r-- | examples/first.c | 350 | ||||
-rw-r--r-- | include/glibtop/command.h | 3 | ||||
-rw-r--r-- | lib/command.c | 31 | ||||
-rw-r--r-- | lib/open.c | 175 | ||||
-rw-r--r-- | lib/read.c | 29 |
5 files changed, 288 insertions, 300 deletions
diff --git a/examples/first.c b/examples/first.c index d93e8f3b..d6031e9a 100644 --- a/examples/first.c +++ b/examples/first.c @@ -52,93 +52,93 @@ main (int argc, char *argv []) for (c = 0; c < count; c++) glibtop_get_cpu (&data.cpu); - 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); + printf ("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); for (c = 0; c < count; c++) glibtop_get_mem (&data.mem); - 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); + printf ("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); for (c = 0; c < count; c++) glibtop_get_swap (&data.swap); - fprintf (stderr, "Swap (0x%08lx): %lu, %lu, %lu\n", data.swap.flags, - data.swap.total, data.swap.used, data.swap.free); + printf ("Swap (0x%08lx): %lu, %lu, %lu\n", data.swap.flags, + data.swap.total, data.swap.used, data.swap.free); for (c = 0; c < count; c++) glibtop_get_uptime (&data.uptime); - fprintf (stderr, "Uptime (0x%08lx): %f, %f\n", data.uptime.flags, - data.uptime.uptime, data.uptime.idletime); + printf ("Uptime (0x%08lx): %f, %f\n", data.uptime.flags, + data.uptime.uptime, data.uptime.idletime); for (c = 0; c < count; c++) glibtop_get_loadavg (&data.loadavg); - fprintf (stderr, "Loadavg (0x%08lx): %f, %f, %f\n", data.loadavg.flags, - data.loadavg.loadavg [0], data.loadavg.loadavg [1], - data.loadavg.loadavg [2]); + 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 < count; c++) glibtop_get_shm_limits (&data.shm_limits); - fprintf (stderr, "Shm Limits (0x%08lx): %ld, %ld, %ld, %ld, %ld\n", - data.shm_limits.flags, data.shm_limits.shmmax, - data.shm_limits.shmmin, data.shm_limits.shmmni, - data.shm_limits.shmseg, data.shm_limits.shmall); + printf ("Shm Limits (0x%08lx): %ld, %ld, %ld, %ld, %ld\n", + data.shm_limits.flags, data.shm_limits.shmmax, + data.shm_limits.shmmin, data.shm_limits.shmmni, + data.shm_limits.shmseg, data.shm_limits.shmall); for (c = 0; c < count; c++) glibtop_get_msg_limits (&data.msg_limits); - 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.msgmap, data.msg_limits.msgmax, - data.msg_limits.msgmnb, data.msg_limits.msgmni, - data.msg_limits.msgssz, data.msg_limits.msgtql); + printf ("Msg Limits (0x%08lx): %ld, %ld, %ld, %ld, %ld, %ld, %ld\n", + data.msg_limits.flags, data.msg_limits.msgpool, + data.msg_limits.msgmap, data.msg_limits.msgmax, + data.msg_limits.msgmnb, data.msg_limits.msgmni, + data.msg_limits.msgssz, data.msg_limits.msgtql); for (c = 0; c < count; c++) glibtop_get_sem_limits (&data.sem_limits); - fprintf (stderr, "Sem Limits (0x%08lx): " - "%ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld\n", - data.sem_limits.flags, data.sem_limits.semmap, - data.sem_limits.semmni, data.sem_limits.semmns, - data.sem_limits.semmnu, data.sem_limits.semmsl, - data.sem_limits.semopm, data.sem_limits.semume, - data.sem_limits.semusz, data.sem_limits.semvmx, - data.sem_limits.semaem); + printf ("Sem Limits (0x%08lx): " + "%ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld\n", + data.sem_limits.flags, data.sem_limits.semmap, + data.sem_limits.semmni, data.sem_limits.semmns, + data.sem_limits.semmnu, data.sem_limits.semmsl, + data.sem_limits.semopm, data.sem_limits.semume, + data.sem_limits.semusz, data.sem_limits.semvmx, + data.sem_limits.semaem); - fprintf (stderr, "\n"); + printf ("\n"); glibtop_get_sysdeps (&sysdeps); - fprintf (stderr, "Sysdeps (0x%08lx): %lu, %lu, %lu, %lu, %lu, " - "%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n", - sysdeps.flags, sysdeps.cpu, sysdeps.mem, sysdeps.swap, - sysdeps.uptime, sysdeps.loadavg, sysdeps.shm_limits, - sysdeps.msg_limits, sysdeps.sem_limits, - sysdeps.proclist, sysdeps.proc_state, - sysdeps.proc_uid, sysdeps.proc_mem, - sysdeps.proc_time, sysdeps.proc_signal, - sysdeps.proc_kernel, sysdeps.proc_segment); - - fprintf (stderr, "\n"); + printf ("Sysdeps (0x%08lx): %lu, %lu, %lu, %lu, %lu, " + "%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n", + sysdeps.flags, sysdeps.cpu, sysdeps.mem, sysdeps.swap, + sysdeps.uptime, sysdeps.loadavg, sysdeps.shm_limits, + sysdeps.msg_limits, sysdeps.sem_limits, + sysdeps.proclist, sysdeps.proc_state, + sysdeps.proc_uid, sysdeps.proc_mem, + sysdeps.proc_time, sysdeps.proc_signal, + sysdeps.proc_kernel, sysdeps.proc_segment); + + printf ("\n"); ptr = glibtop_get_proclist (&data.proclist); - fprintf (stderr, "Proclist (0x%08lx): %ld, %ld, %ld\n", - data.proclist.flags, data.proclist.number, - data.proclist.size, data.proclist.total); + printf ("Proclist (0x%08lx): %ld, %ld, %ld\n", + data.proclist.flags, data.proclist.number, + data.proclist.size, data.proclist.total); if (ptr) { - fprintf (stderr, "\nProcess: "); + printf ("\nProcess: "); for (i = 0; i < data.proclist.number; i++) - fprintf (stderr, "%s%u", i ? ", " : "", ptr [i]); - fprintf (stderr, "\n"); + printf ("%s%u", i ? ", " : "", ptr [i]); + printf ("\n"); } glibtop_free (ptr); @@ -146,218 +146,218 @@ main (int argc, char *argv []) pid = getpid (); ppid = getppid (); - fprintf (stderr, "\n"); + printf ("\n"); for (c = 0; c < count; c++) glibtop_get_proc_state (&data.proc_state, pid); - fprintf (stderr, "Proc_State PID %5u (0x%08lx): '%s', %c, %u, %u\n", - pid, data.proc_state.flags, data.proc_state.cmd, - data.proc_state.state, data.proc_state.uid, - data.proc_state.gid); + printf ("Proc_State PID %5u (0x%08lx): '%s', %c, %u, %u\n", + pid, data.proc_state.flags, data.proc_state.cmd, + data.proc_state.state, data.proc_state.uid, + data.proc_state.gid); for (c = 0; c < count; c++) glibtop_get_proc_uid (&data.proc_uid, pid); - fprintf (stderr, "Proc_Uid PID %5u (0x%08lx): " - "%d %d %d %d %d %d %d %d %d %d %d %d\n", - pid, data.proc_uid.flags, data.proc_uid.uid, - data.proc_uid.euid, data.proc_uid.gid, - data.proc_uid.egid, data.proc_uid.pid, - data.proc_uid.ppid, data.proc_uid.pgrp, - data.proc_uid.session, data.proc_uid.tty, - data.proc_uid.tpgid, data.proc_uid.priority, - data.proc_uid.nice); + printf ("Proc_Uid PID %5u (0x%08lx): " + "%d %d %d %d %d %d %d %d %d %d %d %d\n", + pid, data.proc_uid.flags, data.proc_uid.uid, + data.proc_uid.euid, data.proc_uid.gid, + data.proc_uid.egid, data.proc_uid.pid, + data.proc_uid.ppid, data.proc_uid.pgrp, + data.proc_uid.session, data.proc_uid.tty, + data.proc_uid.tpgid, data.proc_uid.priority, + data.proc_uid.nice); for (c = 0; c < count; c++) glibtop_get_proc_mem (&data.proc_mem, pid); - fprintf (stderr, "Proc_Mem PID %5u (0x%08lx): " - "%ld %ld %ld %ld %ld %ld\n", pid, data.proc_mem.flags, - data.proc_mem.size, data.proc_mem.vsize, - data.proc_mem.resident, data.proc_mem.share, - data.proc_mem.rss, data.proc_mem.rss_rlim); + printf ("Proc_Mem PID %5u (0x%08lx): " + "%ld %ld %ld %ld %ld %ld\n", pid, data.proc_mem.flags, + data.proc_mem.size, data.proc_mem.vsize, + data.proc_mem.resident, data.proc_mem.share, + data.proc_mem.rss, data.proc_mem.rss_rlim); for (c = 0; c < count; c++) glibtop_get_proc_time (&data.proc_time, pid); - fprintf (stderr, "Proc_Time PID %5u (0x%08lx): " - "%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.stime, data.proc_time.cutime, - data.proc_time.cstime, data.proc_time.timeout, - data.proc_time.it_real_value); + printf ("Proc_Time PID %5u (0x%08lx): " + "%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.stime, data.proc_time.cutime, + data.proc_time.cstime, data.proc_time.timeout, + data.proc_time.it_real_value); for (c = 0; c < count; c++) glibtop_get_proc_signal (&data.proc_signal, pid); - fprintf (stderr, "Proc_Signal PID %5u (0x%08lx): " - "%d %d %d %d\n", pid, data.proc_signal.flags, - data.proc_signal.signal, data.proc_signal.blocked, - data.proc_signal.sigignore, data.proc_signal.sigcatch); + printf ("Proc_Signal PID %5u (0x%08lx): " + "%d %d %d %d\n", pid, data.proc_signal.flags, + data.proc_signal.signal, data.proc_signal.blocked, + data.proc_signal.sigignore, data.proc_signal.sigcatch); for (c = 0; c < count; c++) glibtop_get_proc_kernel (&data.proc_kernel, pid); - fprintf (stderr, "Proc_Kernel PID %5u (0x%08lx): " - "%lu %lu %lu %lu %lu %lu %lu %lu\n", pid, - data.proc_kernel.flags, data.proc_kernel.k_flags, - data.proc_kernel.min_flt, data.proc_kernel.maj_flt, - data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt, - data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip, - data.proc_kernel.wchan); + printf ("Proc_Kernel PID %5u (0x%08lx): " + "%lu %lu %lu %lu %lu %lu %lu %lu\n", pid, + data.proc_kernel.flags, data.proc_kernel.k_flags, + data.proc_kernel.min_flt, data.proc_kernel.maj_flt, + data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt, + data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip, + data.proc_kernel.wchan); for (c = 0; c < count; c++) glibtop_get_proc_segment (&data.proc_segment, pid); - fprintf (stderr, "Proc_Segment PID %5u (0x%08lx): " - "%ld %ld %ld %ld %lu %lu %lu\n", pid, data.proc_segment.flags, - data.proc_segment.trs, data.proc_segment.lrs, - data.proc_segment.drs, data.proc_segment.dt, - data.proc_segment.start_code, data.proc_segment.end_code, - data.proc_segment.start_stack); + printf ("Proc_Segment PID %5u (0x%08lx): " + "%ld %ld %ld %ld %lu %lu %lu\n", pid, data.proc_segment.flags, + data.proc_segment.trs, data.proc_segment.lrs, + data.proc_segment.drs, data.proc_segment.dt, + data.proc_segment.start_code, data.proc_segment.end_code, + data.proc_segment.start_stack); - fprintf (stderr, "\n"); + printf ("\n"); for (c = 0; c < count; c++) glibtop_get_proc_state (&data.proc_state, ppid); - fprintf (stderr, "Proc_State PPID %5u (0x%08lx): '%s', %c, %u, %u\n", - ppid, data.proc_state.flags, data.proc_state.cmd, - data.proc_state.state, data.proc_state.uid, - data.proc_state.gid); + printf ("Proc_State PPID %5u (0x%08lx): '%s', %c, %u, %u\n", + ppid, data.proc_state.flags, data.proc_state.cmd, + data.proc_state.state, data.proc_state.uid, + data.proc_state.gid); for (c = 0; c < count; c++) glibtop_get_proc_uid (&data.proc_uid, ppid); - fprintf (stderr, "Proc_Uid PPID %5u (0x%08lx): " - "%d %d %d %d %d %d %d %d %d %d %d %d\n", - ppid, data.proc_uid.flags, data.proc_uid.uid, - data.proc_uid.euid, data.proc_uid.gid, - data.proc_uid.egid, data.proc_uid.pid, - data.proc_uid.ppid, data.proc_uid.pgrp, - data.proc_uid.session, data.proc_uid.tty, - data.proc_uid.tpgid, data.proc_uid.priority, - data.proc_uid.nice); + printf ("Proc_Uid PPID %5u (0x%08lx): " + "%d %d %d %d %d %d %d %d %d %d %d %d\n", + ppid, data.proc_uid.flags, data.proc_uid.uid, + data.proc_uid.euid, data.proc_uid.gid, + data.proc_uid.egid, data.proc_uid.pid, + data.proc_uid.ppid, data.proc_uid.pgrp, + data.proc_uid.session, data.proc_uid.tty, + data.proc_uid.tpgid, data.proc_uid.priority, + data.proc_uid.nice); for (c = 0; c < count; c++) glibtop_get_proc_mem (&data.proc_mem, ppid); - fprintf (stderr, "Proc_Mem PPID %5u (0x%08lx): " - "%ld %ld %ld %ld %ld %ld\n", ppid, data.proc_mem.flags, - data.proc_mem.size, data.proc_mem.vsize, - data.proc_mem.resident, data.proc_mem.share, - data.proc_mem.rss, data.proc_mem.rss_rlim); + printf ("Proc_Mem PPID %5u (0x%08lx): " + "%ld %ld %ld %ld %ld %ld\n", ppid, data.proc_mem.flags, + data.proc_mem.size, data.proc_mem.vsize, + data.proc_mem.resident, data.proc_mem.share, + data.proc_mem.rss, data.proc_mem.rss_rlim); for (c = 0; c < count; c++) glibtop_get_proc_time (&data.proc_time, ppid); - fprintf (stderr, "Proc_Time PPID %5u (0x%08lx): " - "%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.stime, data.proc_time.cutime, - data.proc_time.cstime, data.proc_time.timeout, - data.proc_time.it_real_value); + printf ("Proc_Time PPID %5u (0x%08lx): " + "%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.stime, data.proc_time.cutime, + data.proc_time.cstime, data.proc_time.timeout, + data.proc_time.it_real_value); for (c = 0; c < count; c++) glibtop_get_proc_signal (&data.proc_signal, ppid); - fprintf (stderr, "Proc_Signal PPID %5u (0x%08lx): " - "%d %d %d %d\n", ppid, data.proc_signal.flags, - data.proc_signal.signal, data.proc_signal.blocked, - data.proc_signal.sigignore, data.proc_signal.sigcatch); + printf ("Proc_Signal PPID %5u (0x%08lx): " + "%d %d %d %d\n", ppid, data.proc_signal.flags, + data.proc_signal.signal, data.proc_signal.blocked, + data.proc_signal.sigignore, data.proc_signal.sigcatch); for (c = 0; c < count; c++) glibtop_get_proc_kernel (&data.proc_kernel, ppid); - fprintf (stderr, "Proc_Kernel PPID %5u (0x%08lx): " - "%lu %lu %lu %lu %lu %lu %lu %lu\n", ppid, - data.proc_kernel.flags, data.proc_kernel.k_flags, - data.proc_kernel.min_flt, data.proc_kernel.maj_flt, - data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt, - data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip, - data.proc_kernel.wchan); + printf ("Proc_Kernel PPID %5u (0x%08lx): " + "%lu %lu %lu %lu %lu %lu %lu %lu\n", ppid, + data.proc_kernel.flags, data.proc_kernel.k_flags, + data.proc_kernel.min_flt, data.proc_kernel.maj_flt, + data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt, + data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip, + data.proc_kernel.wchan); for (c = 0; c < count; c++) glibtop_get_proc_segment (&data.proc_segment, ppid); - fprintf (stderr, "Proc_Segment PPID %5u (0x%08lx): " - "%ld %ld %ld %ld %lu %lu %lu\n", ppid, data.proc_segment.flags, - data.proc_segment.trs, data.proc_segment.lrs, - data.proc_segment.drs, data.proc_segment.dt, - data.proc_segment.start_code, data.proc_segment.end_code, - data.proc_segment.start_stack); + printf ("Proc_Segment PPID %5u (0x%08lx): " + "%ld %ld %ld %ld %lu %lu %lu\n", ppid, data.proc_segment.flags, + data.proc_segment.trs, data.proc_segment.lrs, + data.proc_segment.drs, data.proc_segment.dt, + data.proc_segment.start_code, data.proc_segment.end_code, + data.proc_segment.start_stack); - fprintf (stderr, "\n"); + printf ("\n"); for (c = 0; c < count; c++) glibtop_get_proc_state (&data.proc_state, 1); - fprintf (stderr, "Proc_State INIT %5u (0x%08lx): '%s', %c, %u, %u\n", - 1, data.proc_state.flags, data.proc_state.cmd, - data.proc_state.state, data.proc_state.uid, - data.proc_state.gid); + printf ("Proc_State INIT %5u (0x%08lx): '%s', %c, %u, %u\n", + 1, data.proc_state.flags, data.proc_state.cmd, + data.proc_state.state, data.proc_state.uid, + data.proc_state.gid); for (c = 0; c < count; c++) glibtop_get_proc_uid (&data.proc_uid, 1); - fprintf (stderr, "Proc_Uid INIT %5u (0x%08lx): " - "%d %d %d %d %d %d %d %d %d %d %d %d\n", - 1, data.proc_uid.flags, data.proc_uid.uid, - data.proc_uid.euid, data.proc_uid.gid, - data.proc_uid.egid, data.proc_uid.pid, - data.proc_uid.ppid, data.proc_uid.pgrp, - data.proc_uid.session, data.proc_uid.tty, - data.proc_uid.tpgid, data.proc_uid.priority, - data.proc_uid.nice); + printf ("Proc_Uid INIT %5u (0x%08lx): " + "%d %d %d %d %d %d %d %d %d %d %d %d\n", + 1, data.proc_uid.flags, data.proc_uid.uid, + data.proc_uid.euid, data.proc_uid.gid, + data.proc_uid.egid, data.proc_uid.pid, + data.proc_uid.ppid, data.proc_uid.pgrp, + data.proc_uid.session, data.proc_uid.tty, + data.proc_uid.tpgid, data.proc_uid.priority, + data.proc_uid.nice); for (c = 0; c < count; c++) glibtop_get_proc_mem (&data.proc_mem, 1); - fprintf (stderr, "Proc_Mem INIT %5u (0x%08lx): " - "%ld %ld %ld %ld %ld %ld\n", 1, data.proc_mem.flags, - data.proc_mem.size, data.proc_mem.vsize, - data.proc_mem.resident, data.proc_mem.share, - data.proc_mem.rss, data.proc_mem.rss_rlim); + printf ("Proc_Mem INIT %5u (0x%08lx): " + "%ld %ld %ld %ld %ld %ld\n", 1, data.proc_mem.flags, + data.proc_mem.size, data.proc_mem.vsize, + data.proc_mem.resident, data.proc_mem.share, + data.proc_mem.rss, data.proc_mem.rss_rlim); for (c = 0; c < count; c++) glibtop_get_proc_time (&data.proc_time, 1); - fprintf (stderr, "Proc_Time INIT %5u (0x%08lx): " - "%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.stime, data.proc_time.cutime, - data.proc_time.cstime, data.proc_time.timeout, - data.proc_time.it_real_value); + printf ("Proc_Time INIT %5u (0x%08lx): " + "%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.stime, data.proc_time.cutime, + data.proc_time.cstime, data.proc_time.timeout, + data.proc_time.it_real_value); for (c = 0; c < count; c++) glibtop_get_proc_signal (&data.proc_signal, 1); - fprintf (stderr, "Proc_Signal INIT %5u (0x%08lx): " - "%d %d %d %d\n", 1, data.proc_signal.flags, - data.proc_signal.signal, data.proc_signal.blocked, - data.proc_signal.sigignore, data.proc_signal.sigcatch); + printf ("Proc_Signal INIT %5u (0x%08lx): " + "%d %d %d %d\n", 1, data.proc_signal.flags, + data.proc_signal.signal, data.proc_signal.blocked, + data.proc_signal.sigignore, data.proc_signal.sigcatch); for (c = 0; c < count; c++) glibtop_get_proc_kernel (&data.proc_kernel, 1); - fprintf (stderr, "Proc_Kernel INIT %5u (0x%08lx): " - "%lu %lu %lu %lu %lu %lu %lu %lu\n", 1, - data.proc_kernel.flags, data.proc_kernel.k_flags, - data.proc_kernel.min_flt, data.proc_kernel.maj_flt, - data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt, - data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip, - data.proc_kernel.wchan); + printf ("Proc_Kernel INIT %5u (0x%08lx): " + "%lu %lu %lu %lu %lu %lu %lu %lu\n", 1, + data.proc_kernel.flags, data.proc_kernel.k_flags, + data.proc_kernel.min_flt, data.proc_kernel.maj_flt, + data.proc_kernel.cmin_flt, data.proc_kernel.cmaj_flt, + data.proc_kernel.kstk_esp, data.proc_kernel.kstk_eip, + data.proc_kernel.wchan); for (c = 0; c < count; c++) glibtop_get_proc_segment (&data.proc_segment, 1); - fprintf (stderr, "Proc_Segment INIT %5u (0x%08lx): " - "%ld %ld %ld %ld %lu %lu %lu\n", 1, data.proc_segment.flags, - data.proc_segment.trs, data.proc_segment.lrs, - data.proc_segment.drs, data.proc_segment.dt, - data.proc_segment.start_code, data.proc_segment.end_code, - data.proc_segment.start_stack); + printf ("Proc_Segment INIT %5u (0x%08lx): " + "%ld %ld %ld %ld %lu %lu %lu\n", 1, data.proc_segment.flags, + data.proc_segment.trs, data.proc_segment.lrs, + data.proc_segment.drs, data.proc_segment.dt, + data.proc_segment.start_code, data.proc_segment.end_code, + data.proc_segment.start_stack); exit (0); } diff --git a/include/glibtop/command.h b/include/glibtop/command.h index 259bdec0..1987e5d1 100644 --- a/include/glibtop/command.h +++ b/include/glibtop/command.h @@ -71,7 +71,8 @@ union _glibtop_response_union struct _glibtop_response { - size_t data_size; + off_t offset; + size_t size, data_size; union _glibtop_response_union u; }; diff --git a/lib/command.c b/lib/command.c index b7f6ccd4..abef8bcd 100644 --- a/lib/command.c +++ b/lib/command.c @@ -32,7 +32,6 @@ glibtop_call_l (glibtop *server, unsigned command, size_t send_size, void *send_ { glibtop_command cmnd; glibtop_response response; - void *ptr; glibtop_init_r (&server, 0, 0); @@ -47,24 +46,34 @@ glibtop_call_l (glibtop *server, unsigned command, size_t send_size, void *send_ * of two. */ #ifdef DEBUG - fprintf (stderr, "COMMAND: send_size = %d; command = %d; sizeof (cmnd) = %d\n", - send_size, command, sizeof (glibtop_command)); + // fprintf (stderr, "COMMAND: send_size = %d; command = %d; sizeof (cmnd) = %d\n", + // send_size, command, sizeof (glibtop_command)); #endif - - if (send_size <= _GLIBTOP_PARAM_SIZE) + if (send_size <= _GLIBTOP_PARAM_SIZE) { memcpy (cmnd.parameter, send_buf, send_size); - else cmnd.size = send_size; + } else { + cmnd.data_size = send_size; + } glibtop_write_l (server, sizeof (glibtop_command), &cmnd); - glibtop_write_l (server, send_size, send_buf); + // glibtop_write_l (server, cmnd.data_size, send_buf); glibtop_read_l (server, sizeof (glibtop_response), &response); - /* glibtop_read_l (server, recv_size, recv_buf); */ - - /* ptr = glibtop_read_data_l (server); */ - + fprintf (stderr, "RESPONSE: %d - %d\n", response.offset, response.data_size); + + if (recv_buf) + memcpy (recv_buf, ((char *) &response) + response.offset, recv_size); + + if (response.data_size) { + void *ptr = glibtop_malloc_r (server, response.data_size); + + glibtop_read_l (server, response.data_size, ptr); + + return ptr; + } + return NULL; } @@ -33,144 +33,97 @@ void glibtop_open_l (glibtop *server, const char *program_name, const unsigned long features, const unsigned flags) { - char version [BUFSIZ], buffer [BUFSIZ]; - char *server_command, *server_rsh, *temp; - char *server_host, *server_user; + char version [BUFSIZ], buffer [BUFSIZ], *temp, *temp2; glibtop_sysdeps sysdeps; - int connect_type; + int connect_type, ret; memset (server, 0, sizeof (glibtop)); server->name = program_name; /* Is the user allowed to override the server ? */ + + if (flags & GLIBTOP_OPEN_NO_OVERRIDE) + return; - if ((flags & GLIBTOP_OPEN_NO_OVERRIDE) == 0) { - connect_type = glibtop_make_connection - (NULL, (u_short) 0, &server->socket); - -#ifdef INTERNET_DOMAIN_SOCKETS - if (connect_type == (int) CONN_INTERNET) { - fprintf (stderr, "Calling GLITOP_CMND_SYSDEPS ...\n"); - - glibtop_call_l (server, GLIBTOP_CMND_SYSDEPS, 0, NULL, - sizeof (glibtop_sysdeps), &sysdeps); - - server->features = sysdeps.features; - - fprintf (stderr, "Features: %lu\n", server->features); + /* Try to get data from environment. */ + + temp = getenv ("LIBGTOP_SERVER") ? + getenv ("LIBGTOP_SERVER") : GTOP_SERVER; - return; - } -#endif /* INTERNET_DOMAIN_SOCKETS */ - - /* Try to get data from environment. */ - - temp = getenv ("LIBGTOP_SERVER") ? - getenv ("LIBGTOP_SERVER") : GTOP_SERVER; - - server_command = glibtop_malloc_r (server, strlen (temp) + 1); - - strcpy (server_command, temp); - - temp = getenv ("LIBGTOP_RSH") ? - getenv ("LIBGTOP_RSH") : "rsh"; - - server_rsh = glibtop_malloc_r (server, strlen (temp) + 1); - - strcpy (server_rsh, temp); - - /* Extract host and user information. */ - - temp = strstr (server_command, ":"); - - if (temp) { - *temp = 0; - server_host = server_command; - server_command = temp+1; - - temp = strstr (server_host, "@"); - - if (temp) { - *temp = 0; - server_user = server_host; - server_host = temp+1; - } else { - server_user = NULL; - } - } else { - server_host = NULL; - server_user = NULL; - } - - /* Store everything in `server'. */ - - server->server_command = server_command; - server->server_host = server_host; - server->server_user = server_user; - server->server_rsh = server_rsh; - } + server->server_command = glibtop_strdup_r (server, temp); + + temp = getenv ("LIBGTOP_RSH") ? + getenv ("LIBGTOP_RSH") : "rsh"; + + server->server_rsh = glibtop_strdup_r (server, temp); - /* Get server features. */ + /* If the first character of 'server_command' is a colon, + * the first field is the method to connect to the server. */ - if (server->server_host == NULL) { - server->features = glibtop_server_features; + if (server->server_command [0] == ':') { - if (server->features == 0) - return; - } + /* Everything up to the next colon is the method. */ + + temp = strstr (server->server_command+1, ":"); + if (temp) *temp = 0; - /* Fork and exec server. */ + /* Dispatch method. */ + + if (!strcmp (server->server_command+1, "direct")) { - if (pipe (server->input) || pipe (server->output)) - glibtop_error_r (server, _("cannot make a pipe: %s\n"), - strerror (errno)); + /* Use sysdeps dir instead of connecting to server + * even if using the server would be required on + * the current system. */ - server->pid = fork (); + return; + + } else if (!strcmp (server->server_command+1, "inet")) { - if (server->pid < 0) { - glibtop_error_r (server, _("%s: fork failed: %s\n"), - strerror (errno)); - } else if (server->pid == 0) { - close (0); close (1); /* close (2); */ - close (server->input [0]); close (server->output [1]); - dup2 (server->input [1], 1); /* dup2 (server->input [1], 2); */ - dup2 (server->output [0], 0); + /* Connect to internet server. */ - if (server_host) { - if (server_user) { - execl (server->server_rsh, "-l", - server->server_user, server->server_host, - server->server_command, NULL); + if (temp == NULL) { + server->server_host = glibtop_strdup_r + (server, "localhost"); } else { - execl (server->server_rsh, - server->server_host, server_command, NULL); + temp2 = strstr (temp+1, ":"); + if (temp2) *temp2 = 0; + + server->server_host = glibtop_strdup_r + (server, temp+1); + + temp = temp2; } - } else { - execl (server->server_command, NULL); - } + + if (temp == NULL) { + server->server_port = DEFAULT_PORT; + } else { + temp2 = strstr (temp+1, ":"); + if (temp2) *temp2 = 0; - _exit (2); - } + ret = sscanf (temp+1, "%d", &server->server_port); - fprintf (stderr, "PID: %d\n", server->pid); + if (ret != 1) + server->server_port = DEFAULT_PORT; - close (server->input [1]); - close (server->output [0]); + temp = temp2 ? temp2 + 1 : temp2; + } - sprintf (version, "%s server %s ready.\n", PACKAGE, VERSION); + fprintf (stderr, "Connecting to '%s' port %d.\n", + server->server_host, server->server_port); - glibtop_read_l (server, strlen (version), buffer); + connect_type = glibtop_make_connection + (server->server_host, server->server_port, + &server->socket); - if (memcmp (version, buffer, strlen (version))) - glibtop_error_r (server, _("server version is not %s"), VERSION); + server->features = -1; - fprintf (stderr, "Calling GLITOP_CMND_SYSDEPS ...\n"); + return; + } + } glibtop_call_l (server, GLIBTOP_CMND_SYSDEPS, 0, NULL, - sizeof (glibtop_sysdeps), &sysdeps); - + sizeof (glibtop_sysdeps), &sysdeps); + server->features = sysdeps.features; - - fprintf (stderr, "Features: %lu\n", server->features); } @@ -23,10 +23,35 @@ /* 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 glibtop_read_l (glibtop *server, size_t size, void *buf) { - int ret; + int ret = 0; glibtop_init_r (&server, 0, 0); @@ -35,7 +60,7 @@ glibtop_read_l (glibtop *server, size_t size, void *buf) #endif if (server->socket) { - ret = recv (server->socket, buf, size, 0); + do_read (server->socket, buf, size); } else { ret = read (server->input [0], buf, size); } |