#include #include #include #include #include #include #include #include #include #include /* Some exported things aren't in the header files... */ struct VenusFid { afs_int32 Cell; afs_int32 Volume; afs_int32 Vnode; afs_int32 Unique; }; void do_astat(char *filename); int do_pioctl(char *file, int opcode, struct ViceIoctl *parm, int followSym, int fatal); int main(int argc, char *argv[]) { int i; if (argc < 2) { fprintf(stderr, "Usage: %s filename ..\n", argv[0]); exit(1); } for(i=1; ih_name); else printf("%s %s", i ? "," : "", ip_string); } printf("\n"); bzero(params, sizeof(params)); params.out = (char *) buf; params.out_size = sizeof(buf); do_pioctl(filename, VIOC_FILE_CELL_NAME, ¶ms, 1, 1); bzero(params, sizeof(params)); params.out = (char *) &fid; params.out_size = sizeof(fid); do_pioctl(filename, VIOCGETFID, ¶ms, 1, 1); printf("Cell: %#x (%s)\n", fid.Cell, buf); printf("Volume: %d (%#x)\n", fid.Volume, fid.Volume); printf("Vnode: %d\n", fid.Vnode); printf("Uniq: %d\n", fid.Unique); } int do_pioctl(char *file, int opcode, struct ViceIoctl *parm, int followSym, int fatal) { int ret; if (parm->in) bzero(parm->in, parm->in_size); if (parm->out) bzero(parm->out, parm->out_size); ret = pioctl(file, opcode, parm, followSym); if (ret < 0 && fatal) { fprintf(stderr, "%s while doing pioctl(%s, %#x)\n", strerror(errno), file, opcode); exit(1); } return ret; }