version 1.13, 1997/12/06 21:19:34 |
version 1.14, 1998/06/25 06:21:34 |
|
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
|
#include "fstat.h" |
|
|
#define TEXT -1 |
#define TEXT -1 |
#define CDIR -2 |
#define CDIR -2 |
|
|
} DEVS; |
} DEVS; |
DEVS *devs; |
DEVS *devs; |
|
|
struct filestat { |
|
long fsid; |
|
long fileid; |
|
mode_t mode; |
|
u_int64_t size; |
|
dev_t rdev; |
|
}; |
|
|
|
int fsflg, /* show files on same filesystem as file(s) argument */ |
int fsflg, /* show files on same filesystem as file(s) argument */ |
pflg, /* show files open by a particular pid */ |
pflg, /* show files open by a particular pid */ |
uflg; /* show files open by a particular (effective) user */ |
uflg; /* show files open by a particular (effective) user */ |
|
|
|
|
int ufs_filestat __P((struct vnode *, struct filestat *)); |
int ufs_filestat __P((struct vnode *, struct filestat *)); |
int ext2fs_filestat __P((struct vnode *, struct filestat *)); |
int ext2fs_filestat __P((struct vnode *, struct filestat *)); |
|
int isofs_filestat __P((struct vnode *, struct filestat *)); |
|
int msdos_filestat __P((struct vnode *, struct filestat *)); |
int nfs_filestat __P((struct vnode *, struct filestat *)); |
int nfs_filestat __P((struct vnode *, struct filestat *)); |
void dofiles __P((struct kinfo_proc *)); |
void dofiles __P((struct kinfo_proc *)); |
void getinetproto __P((int)); |
void getinetproto __P((int)); |
|
|
} |
} |
|
|
char *Uname, *Comm; |
char *Uname, *Comm; |
int Pid; |
pid_t Pid; |
|
|
#define PREFIX(i) printf("%-8.8s %-10s %5d", Uname, Comm, Pid); \ |
#define PREFIX(i) printf("%-8.8s %-10s %5d", Uname, Comm, Pid); \ |
switch(i) { \ |
switch(i) { \ |
|
|
if (!ext2fs_filestat(&vn, &fst)) |
if (!ext2fs_filestat(&vn, &fst)) |
badtype = "error"; |
badtype = "error"; |
break; |
break; |
|
case VT_ISOFS: |
|
if (!isofs_filestat(&vn, &fst)) |
|
badtype = "error"; |
|
break; |
|
case VT_MSDOSFS: |
|
if (!msdos_filestat(&vn, &fst)) |
|
badtype = "error"; |
|
break; |
default: { |
default: { |
static char unknown[30]; |
static char unknown[30]; |
sprintf(badtype = unknown, "?(%x)", vn.v_tag); |
sprintf(badtype = unknown, "?(%x)", vn.v_tag); |
|
|
fsp->mode = inode.i_e2fs_mode; |
fsp->mode = inode.i_e2fs_mode; |
fsp->size = inode.i_e2fs_size; |
fsp->size = inode.i_e2fs_size; |
fsp->rdev = 0; /* XXX */ |
fsp->rdev = 0; /* XXX */ |
|
|
|
return 1; |
|
} |
|
|
|
int |
|
msdos_filestat(vp, fsp) |
|
struct vnode *vp; |
|
struct filestat *fsp; |
|
{ |
|
#if 0 |
|
struct inode inode; |
|
|
|
if (!KVM_READ(VTOI(vp), &inode, sizeof (inode))) { |
|
dprintf(stderr, "can't read inode at %p for pid %d\n", |
|
VTOI(vp), Pid); |
|
return 0; |
|
} |
|
fsp->fsid = inode.i_dev & 0xffff; |
|
fsp->fileid = (long)inode.i_number; |
|
fsp->mode = inode.i_e2fs_mode; |
|
fsp->size = inode.i_e2fs_size; |
|
fsp->rdev = 0; /* XXX */ |
|
#endif |
|
|
return 1; |
return 1; |
} |
} |