⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 2 页
字号:
	for (i = 0; i < NIADDR; i++) {		printf("%8d", G_TO_I(gp)->di_ib[i]);		if (i % 6 == 5)			printf("\n            ");	}	printf("\n");}int get_file_slot(s)	register char *s;{	int index;	int addr;		if((*s == '@') || (*s == '*')){		sscanf(++s, "%x", &addr);		index =	 getindex((char *)addr, filebuckets, FILEBUCKETS);		if(index == -1)			printf("addr 0x%x is not a file\n", addr);	} else		if(isdigit(*s)) {			index = atoi(s);		} else			index = -1;	return(index);}int get_gnode_slot(s)	register char *s;{	int index;	int addr;		switch(*s) {		case '@' :		case '*' :			sscanf(++s, "%x", &addr);			index =	 getindex((char *)addr, gnodebuckets,			    GNODEBUCKETS);			if(index == -1)				printf("addr 0x%x is not a gnode\n", addr);			break;		case '#' :			sscanf(++s, "%d", &addr);			index = gnum_to_slot(addr);			if(index == -1)				printf("cannot find slot %d\n", addr);			break;		default:			if(isdigit(*s))				index = atoi(s);			else {				printf("%s is an invalid token\n", s);				index = -1;			}	}	return(index);}intgnum_to_slot(gnum)	int gnum;{	int slot;	for (slot = 0; slot < tab[GNODE_T].ents; slot++) {		if ((int)gnodetab[slot].g_number == gnum)			return (slot);	}	return (-1);}voidprintrnodehd() {	printf("          FHANDLE            EFFECTIVE       REAL   ");	printf(" AS WR      \n");	printf("SLOT FSID    NO  GEN   REF   UID   GID    UID    GID");	printf(" ERROR FLAGS\n");}voidprintgnodehd() {	printf("SLOT MAJ  MIN FS  GNUMB REF LINK  UID  ");	printf("GID    SIZE FORW BACK    MODE  FLAGS\n");}prgnode_long(gp)	struct gnode *gp;{	printf("g_chain[2] - 0x%x 0x%x (",gp->g_chain[0],gp->g_chain[1]);	if (gp->g_chain[0] != NULL) {		praddr(gp->g_chain[0]);		printf("  ");	}	if (gp->g_chain[1] != NULL) {		praddr(gp->g_chain[1]);		printf("  ");	}	printf(")\n\n");	printf("rdev %d %d (0x%x) ", (gp->g_rdev>>8),(gp->g_rdev&0377),	       gp->g_rdev);	printf("g_shlockc %d g_exlockc %d\n", gp->g_shlockc, gp->g_exlockc);	printf("g_mp -");	praddr(gp->g_mp);	printf(" g_ops - ");	praddr(gp->g_ops);	printf(" g_altops -");	praddr(gp->g_altops);	printf("\n");	printf("g_dquot 0x%x g_blocks %d g_gennum %d\n",	       gp->g_dquot, gp->g_blocks, gp->g_gennum);	printf("\n Initialization state: - ");	switch (gp->g_init) {		default:			printf (" *Unknown*\n");			break;		case READY_GNODE:			printf (" Ready\n");			break;		case RECLAIM_GNODE:			printf (" Reclaim\n");			break;		case NEW_GNODE:			printf (" New\n");			break; 	}		prlock_long(&gp->g_lk);	printf("\nRead-ahead %d\n",gp->g_lastr);	if (gp->g_flag & GTEXT) {		printf(" Text branch:\n");		printf("g_text ");		praddr(gp->g_textp);		printf(" Cmap entry ");		praddr(gp->g_hcmap_struct);		printf("\n");		printf(" xcount %d  hcount %d hcmap 0x%x\n",		       gp->g_xcount, gp->g_hcount, gp->g_hcmap);	}	if ((gp->g_mode & GFMT) == GFSOCK) {		printf(" Socket: \n");		praddr(gp->g_socket);		printf(" (0x%x)\n",gp->g_socket);	}	if (gp->g_count == 0) {		printf("Free list: 0x%x 0x%x (",gp->g_forw,gp->g_back);		if (gp->g_forw != NULL) {			praddr(gp->g_forw);			printf("  ");		}		if (gp->g_back != NULL) {			praddr(gp->g_back);			printf("  ");		}		printf(")\n");	}	printf("\n");}#define EX_RDONLY 0x01 prexport(){	unsigned ep, enxt;	struct export e;	char path[MAXPATHLEN];	readsym(symsrch("_exported"), &ep, sizeof(ep));	if (ep == NULL) {		printf("Empty List\n");		return;	} 	printf(" fsid     inum       gen    map flags path\n");/*              dddddd ddddddddd dddddddddd ddd ss    ppppppppppppppp */	do {		get_export(ep, &e);		if (readmem((char *)path, (int)e.e_path, e.e_pathlen) 		    != e.e_pathlen) {			perror("export path read");			printf("read error on export path at 0x%x\n", e.e_path);			return(0);		}		printf("%5d %10d %10d %3d %2s    %s\n",		       e.e_fsid, e.e_gnum, e.e_gen, e.e_rootmap,		       e.e_flags & EX_RDONLY ? "ro" : "  ",		       path);		ep = (unsigned)e.e_next;	} while (ep != NULL);}intget_export(addr, ep)	unsigned addr;	struct export *ep;{	if (readmem((char *)ep, (int)addr, sizeof(*ep)) 	    != sizeof(*ep)) {		perror("export read");		printf("read error on export at 0x%x\n", addr);		return(0);	}	return(1);}pr_dnlc(){	struct ncache nc;	struct ucred cred;	unsigned addr, size;	char name[50];	int i;	readsym(symsrch("_ncache"), &addr, sizeof(addr));	readsym(symsrch("_ncsize"), &size, sizeof(size));	printf("ncache: 0x%x, cache size %d entries\n", addr, size);	printf("Entry       Name        uid      cred  gnode parent\n");/*              ddddd nnnnnnnnnnnnnnn ddddd 0xhhhhhhhh xxxxx xxxxx */	for (i=0; i<size; i++) {		if (readmem((char *)&nc, (int) addr, sizeof(nc))				    != sizeof(nc)) {			printf("read error on dnlc at 0x%x\n", addr);			perror("dnlc entry read");			return(0);		}		if (nc.vp != NULL) {			readmem((char *)&cred, (int) nc.cred, sizeof(cred));			strncpy(name, nc.name, nc.namlen);			name[nc.namlen]='\0';			printf("%5d %15s %5d 0x%x %5d %5d\n",			       i, name,cred.cr_uid, nc.cred,			       getindex((char *)nc.vp, 					gnodebuckets, GNODEBUCKETS),			       getindex((char *)nc.dp,					gnodebuckets, GNODEBUCKETS));		}		addr += sizeof(struct ncache);	}}prnamei(index)	int index;{	int	nchsize,i;	struct nch *np, nch;	char name[NCHNAMLEN];	unsigned addr;		readsym(symsrch("_nch"), &addr, sizeof(addr));	readsym(symsrch("_nchsize"), &nchsize, sizeof(nchsize));	printf("ncache: 0x%x, cache size %d entries\n", addr, nchsize);	printf("Entry       Name        dev   inode    idev    id     gnode\n");/*              ddddd nnnnnnnnnnnnnnn ddd ddd dddddd ddd ddd dddddd  dddddd*/	if (index == -1) {		for (i=0; i<nchsize; i++) {			if (readmem((char *)&nch, (int) addr, sizeof(nch))			    != sizeof(nch)) {				printf("read error on namei cache at 0x%x\n", addr);				perror("namei cache entry read");				return(0);			}			if ((nch.nc_ip != NULL) && (nch.nc_ino != 0)) {				strncpy(name, nch.nc_name, nch.nc_nlen);				name[nch.nc_nlen]='\0';				printf("%5d %15s %3d %3d %6d %3d %3d %6d %6d\n",				       i, name, 				       major(nch.nc_dev),minor(nch.nc_dev), 				       nch.nc_ino,				       major(nch.nc_idev),minor(nch.nc_idev), 				       nch.nc_id,				       getindex((char *)nch.nc_ip, 						gnodebuckets, GNODEBUCKETS));			}			addr += sizeof(struct nch);		}	} else {		if ((index < 0) || (index > nchsize)) {			printf("bad index (%d) in namei cache\n", index);			perror("bad namei cache index");			return(0);		}		if (readmem((char *)&nch, (int) addr+index*sizeof(nch), 			    sizeof(nch)) != sizeof(nch)) {			printf("read error on namei cache at 0x%x\n", addr);			perror("namei cache entry read");			return(0);		}		if ((nch.nc_ip != NULL) && (nch.nc_ino != 0)) {			strncpy(name, nch.nc_name, nch.nc_nlen);			name[nch.nc_nlen]='\0';			printf("%5d %15s %3d %3d %6d %3d %3d %6d %6d\n",			       index, name, 			       major(nch.nc_dev),minor(nch.nc_dev), 			       nch.nc_ino,			       major(nch.nc_idev),minor(nch.nc_idev), 			       nch.nc_id,			       getindex((char *)nch.nc_ip, 					gnodebuckets, GNODEBUCKETS));		}	}}/* find all the ref's to a gnode */pr_gref(index) 	int index;{	struct gnode *gp;	int i, j, gref, f;	struct	file	*fp;	struct	text	tbuf;	struct	proc	*p;	struct 	ncache 	n;	struct	mount	*m;	struct 	fs_data	fsd;	gp = &gnodetab[index];	gref=0;	printf("\n");	printf("Reference summary for gnode[%d]\n", index);	printf("gnode has %d refs\n",gp->g_count);	printf("\nfile:  ");	for(i = 0; i < tab[FILE_T].ents; i++) {		fp = &filetab[i];		if (fp->f_count == 0)			continue;		if (getindex(fp->f_data, gnodebuckets, GNODEBUCKETS) != index)			continue;		printf("%8d", i);	}	printf("\nuarea: ");	for(i = 0; i < tab[PROC_T].ents; i++) {		p = &proctab[i];		if (p->p_stat == 0)			continue;		get_uarea(&proctab[i]);		if (getindex(U.u_cdir, gnodebuckets, GNODEBUCKETS) == index) {			printf("%d - cdir ",i);			gref++;		}		if (getindex(U.u_rdir, gnodebuckets, GNODEBUCKETS) == index) {			printf("%i - rdir ",i);			gref++;		}		for(j = 0; j < NOFILE; j++) {			if (U.u_ofile[j] == NULL)				continue;			f = getindex((char *)U.u_ofile[j], filebuckets, FILEBUCKETS);			if (filetab[f].f_type != DTYPE_INODE)				continue;			if (getindex(filetab[f].f_data, gnodebuckets, GNODEBUCKETS) == index) {				printf("%d - ofile[%d] ",i, j);				gref++;			}		}	}	printf("\ntext: ");		for(i = 0; i < tab[TEXT_T].ents; i++) {		if(readmem((char *)&tbuf,(int)(tab[TEXT_T].first + i*sizeof tbuf),			   sizeof tbuf) != sizeof tbuf) {			printf("%4d  read error on text table\n", i);			return;		}		if (tbuf.x_gptr == NULL)			continue;		if (getindex((char *)tbuf.x_gptr,gnodebuckets, GNODEBUCKETS) == index) {			printf(" %d",i);			gref++;		}	}	printf("\ndnlc:  ");	for(i = 0; i < tab[DNLC_T].ents; i++) {		if (!get_dnlc(i, &n))			continue;		if (getindex((char *)n.vp,gnodebuckets, GNODEBUCKETS) == index) {			printf("%d - vp ", i);			gref++;		}		if (getindex((char *)n.dp,gnodebuckets, GNODEBUCKETS) == index) {			printf("%d - dp ", i);			gref++;		}	}	printf("\nmount:  ");	for(i = 0; i < tab[MOUNT_T].ents; i++) {		m = &mounttab[i];		if ((m->m_flgs & MTE_DONE) ==0)			continue;		if (getindex((char *)m->m_gnodp,gnodebuckets, GNODEBUCKETS) == index) {			printf("%d - gnodp ", i);			gref++;		}		if (getindex((char *)m->m_rootgp,gnodebuckets, GNODEBUCKETS) == index) {			printf("%d - root ", i);			gref++;		}		if (getindex((char *)m->m_qinod,gnodebuckets, GNODEBUCKETS) == index) {			printf("%d - quota ", i);			gref++;		}	}		printf("\n Found %d refs, %d still unaccounted\n",	       gref, gp->g_count-gref);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -