summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin@src.gnome.org>1998-06-18 19:06:55 +0000
committerMartin Baulig <martin@src.gnome.org>1998-06-18 19:06:55 +0000
commit71187a5e519bd03926c933c57e307f29b07e77c6 (patch)
tree44810abf5421d1aeec10ceb94d2dc32052d268ae
parentb54a5d2dfdce076438da84046b4d0589cbaece36 (diff)
downloadlibgtop-71187a5e519bd03926c933c57e307f29b07e77c6.tar.gz
Some more daemon stuff.
-rw-r--r--examples/first.c350
-rw-r--r--include/glibtop/command.h3
-rw-r--r--lib/command.c31
-rw-r--r--lib/open.c175
-rw-r--r--lib/read.c29
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;
}
diff --git a/lib/open.c b/lib/open.c
index 2411b1c0..fccf3635 100644
--- a/lib/open.c
+++ b/lib/open.c
@@ -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);
}
diff --git a/lib/read.c b/lib/read.c
index 55fb922e..c9a0c565 100644
--- a/lib/read.c
+++ b/lib/read.c
@@ -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);
}