Another "why won't this work" program

BKEHOE at widener BKEHOE at widener
Thu Aug 16 06:42:45 AEST 1990


/*
 * This is being run on a Sun SS1 under 4.0.3.
 *  Theoretically, according to the Design & Implementation of 4.3BSD Unix,
 * this should print out the ascii version of each process's current
 * directory...instead, it chokes on u->u_cwd->cw_dir, which is in the
 * u struct in sys/user.h .. any help, suggestions, etc would be greatly
 * appreciated.

 */

/*
 * cc -o cwd cwd.c -lkvm
 */

#include <stdio.h>
#include <kvm.h>
#include <fcntl.h>
#include <ctype.h>
#include <pwd.h>
#include <sys/param.h>
#include <sys/time.h>
#include <sys/proc.h>
#include <sys/user.h>

main (argc, argv)


{






			*argv);
		exit (1);
	}

	(void) printf("Name\t\tDir\n");
	kvm_setproc (kd);
	while ((proc = kvm_nextproc (kd)))
		if (proc->p_stat != SZOMB && proc->p_uid) {
			if (!(user = kvm_getu(kd, proc)))
				continue;
			(void) printf("%s\n", (getpwuid(proc->p_uid))->pw_name);
/* Curtains & Slow Music */
			(void) printf("%s\n", user->u_cwd->cw_dir);
/* It dies, but the user structure's fine (printing user->u_comm works); I
   stepped thru it with gdb & discovered that the pointer user->u_cwd is off in
   never-never-land; is it a valid entry in
the user structure? */
		}
}



More information about the Comp.unix.wizards mailing list