nfs_trace.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 335 行

C
335
字号
#ifndef lintstatic char *sccsid = "@(#)nfs_trace.c	4.1      (ULTRIX)        7/2/90";#endif lint/************************************************************************ *									* *			Copyright (c) 1986 by				* *		Digital Equipment Corporation, Maynard, MA		* *			All rights reserved.				* *									* *   This software is furnished under a license and may be used and	* *   copied  only  in accordance with the terms of such license and	* *   with the  inclusion  of  the  above  copyright  notice.   This	* *   software  or  any  other copies thereof may not be provided or	* *   otherwise made available to any other person.  No title to and	* *   ownership of the software is hereby transferred.			* *									* *   This software is  derived  from  software  received  from  the	* *   University    of   California,   Berkeley,   and   from   Bell	* *   Laboratories.  Use, duplication, or disclosure is  subject  to	* *   restrictions  under  license  agreements  with  University  of	* *   California and with AT&T.						* *									* *   The information in this software is subject to change  without	* *   notice  and should not be construed as a commitment by Digital	* *   Equipment Corporation.						* *									* *   Digital assumes no responsibility for the use  or  reliability	* *   of its software on equipment which is not supplied by Digital.	* *									* ************************************************************************//* *	Portions of this software have been licensed to  *	Digital Equipment Company, Maynard, MA. *	Copyright (c) 1987 Sun Microsystems, Inc.  ALL RIGHTS RESERVED. *//* *	Modification History: *  *      10 Nov 89 -- lebel *              Added direct maps, bugfixes, metacharacter handling and *              other fun stuff from the reference tape. * 	14 Jun 89 -- condylis *		Added copyright header. * */#include <stdio.h>#include <sys/types.h>#include <rpc/types.h>#include "nfs_prot.h"p_void(){}struct statent {	nfsstat val;	char *str;} stattab[] = {#define doit(XXX)	{ XXX, "XXX" },	doit(NFS_OK)	doit(NFSERR_PERM)	doit(NFSERR_NOENT)	doit(NFSERR_IO)	doit(NFSERR_NXIO)	doit(NFSERR_ACCES)	doit(NFSERR_EXIST)	doit(NFSERR_NODEV)	doit(NFSERR_NOTDIR)	doit(NFSERR_ISDIR)	doit(NFSERR_FBIG)	doit(NFSERR_NOSPC)	doit(NFSERR_ROFS)	doit(NFSERR_NAMETOOLONG)	doit(NFSERR_NOTEMPTY)	doit(NFSERR_DQUOT)	doit(NFSERR_STALE)	doit(NFSERR_WFLUSH)#undef doit};#define STATTABSIZE (sizeof(stattab)/sizeof(struct statent))p_nfsstat(status)	nfsstat *status;{	int i;	for (i = 0; i < STATTABSIZE; i++) {		if (stattab[i].val == *status) {			fprintf(stderr, "stat=%s", stattab[i].str);			return;		}	}	fprintf(stderr, "stat=%d", *status);}p_fhandle(fh)	nfs_fh *fh;{	register int *ip = (int *)fh;	fprintf(stderr, "fh=[%d, %d, %d]", ip[0], ip[1], ip[2]);}p_diropargs(d)	diropargs *d;{	p_fhandle(&d->dir);	fprintf(stderr, ", name=%s", d->name);}p_nfstime(t)	nfstime *t;{	char *s;	char *ctime();		s = ctime((long *)&t->seconds);	s[strlen(s) - 1] = 0;	fprintf(stderr, "%s", s);}p_fattr(f)	fattr *f;{	fprintf(stderr, "type=%u, mode=%o, nlink=%u, uid=%u, gid=%u,\size=%u, blocksize=%u, rdev=%u, blocks=%u, fsid=%u, fileid=%u",		f->type, f->mode, f->nlink, f->uid, f->gid, f->size, 		f->blocksize, f->rdev, f->blocks, f->fsid, f->fileid);	fprintf(stderr, ", atime=");	p_nfstime(&f->atime);	fprintf(stderr, ", mtime=");	p_nfstime(&f->mtime);	fprintf(stderr, ", ctime=");	p_nfstime(&f->ctime);}p_sattr(s)	sattr *s;{	fprintf(stderr, "mode=%o, uid=%u, gid=%u, size=%u", 		s->mode, s->uid, s->gid, s->size);	fprintf(stderr, ", atime=");	p_nfstime(&s->atime);	fprintf(stderr, ", mtime=");	p_nfstime(&s->mtime);}p_diropres(d)	diropres *d;{	p_nfsstat(&d->status);	if (d->status == NFS_OK) {		fprintf(stderr, ", ");		p_fhandle(&d->diropres_u.diropres.file);		fprintf(stderr, ", ");		p_fattr(&d->diropres_u.diropres.attributes);	}}p_sattrargs(sa)	sattrargs *sa;{	p_fhandle(&sa->file);	fprintf(stderr, ", ");	p_sattr(&sa->attributes);}p_attrstat(as)	attrstat *as;{	p_nfsstat(&as->status);	if (as->status == NFS_OK) {		fprintf(stderr, ", ");		p_fattr(&as->attrstat_u.attributes);	}}p_readlinkres(r)	readlinkres *r;{	p_nfsstat(&r->status);	if (r->status == NFS_OK) {		fprintf(stderr, ", data=%s", r->readlinkres_u.data);	}}p_readargs(r)	readargs *r;{	p_fhandle(&r->file);	fprintf(stderr, ", offset=%u, count=%u", r->offset, r->count);}p_readres(r)	readres *r;{	p_nfsstat(&r->status);	if (r->status == NFS_OK) {		fprintf(stderr, ", ");		p_fattr(&r->readres_u.reply.attributes);		fprintf(stderr, ", len=%u, data=(data)",			r->readres_u.reply.data.data_len);	}}p_writeargs(w)	writeargs *w;{	p_fhandle(&w->file);	fprintf(stderr, ", offset=%u, len=%u, data=(data)", 		w->offset, w->data.data_len);}p_createargs(c)	createargs *c;{	p_diropargs(&c->where);	fprintf(stderr, ", ");	p_sattr(&c->attributes);}p_renameargs(r)	renameargs *r;{	p_diropargs(&r->from); 	fprintf(stderr, ", ");	p_diropargs(&r->to);}p_linkargs(args)	linkargs *args;{	p_fhandle(&args->from);	fprintf(stderr, ", ");	p_diropargs(&args->to);}p_symlinkargs(args)	symlinkargs *args;{	p_diropargs(&args->from);	fprintf(stderr, ", to=%s, ", args->to);	p_sattr(&args->attributes);}p_statfsres(res)	statfsres *res;{	p_nfsstat(&res->status);	if (res->status == NFS_OK) {		fprintf(stderr, ", tsize=%d, bsize=%d, blocks=%d, bfree=%d, bavail=%d",			res->statfsres_u.reply.tsize, 			res->statfsres_u.reply.bsize, 			res->statfsres_u.reply.blocks,			res->statfsres_u.reply.bfree, 			res->statfsres_u.reply.bavail);	}}p_readdirargs(args)	readdirargs *args;{	p_fhandle(&args->dir);	fprintf(stderr, ", cookie=%d, count=%d",		*(int *)args->cookie, args->count);}p_entryp(p)	entry *p;{	while (p != NULL) {		fprintf(stderr, "(fileid=%u, name=%s, cookie=%u), ", 			p->fileid, p->name, *(int*)p->cookie);		p = p->nextentry;	}}p_readdirres(res)	readdirres *res;{	p_nfsstat(&res->status);	if (res->status == NFS_OK) {		p_entryp(res->readdirres_u.reply.entries);		fprintf(stderr, ", eof=%d", res->readdirres_u.reply.eof);	}}	struct procinfo {	char *name;	int (*pargs)();	int (*pres)();} procs[] = {    { "NULL",		p_void,		p_void		},    { "GETATTR",	p_fhandle,	p_attrstat	},    { "SETATTR",	p_sattrargs, 	p_attrstat	},    { "ROOT",		p_void,		p_void		},    { "LOOKUP",		p_diropargs,	p_diropres	},    { "READLINK",	p_fhandle,	p_readlinkres	},    { "READ",		p_readargs,	p_readres	},    { "WRITECACHE",	p_void,		p_void		},    { "WRITE",		p_writeargs,	p_attrstat	},    { "CREATE",		p_createargs,	p_diropres	},    { "REMOVE",		p_diropargs,	p_nfsstat	},    { "RENAME",		p_renameargs,	p_nfsstat	},    { "LINK",		p_linkargs,	p_nfsstat	},    { "SYMLINK",	p_symlinkargs,	p_nfsstat	},    { "MKDIR",		p_createargs,	p_nfsstat	},    { "RMDIR",		p_diropargs,	p_nfsstat	},    { "READDIR",	p_readdirargs,	p_readdirres	},    { "STATFS",		p_fhandle,	p_statfsres	},};trace_call(procnum, args)	int procnum;	char *args;{	fprintf(stderr, "%s call(", procs[procnum].name);	(*procs[procnum].pargs)(args);	fprintf(stderr, ")\n");}trace_return(procnum, res)	int procnum;	char *res;{	fprintf(stderr, "%s return(", procs[procnum].name);	(*procs[procnum].pres)(res);	fprintf(stderr, ")\n");}

⌨️ 快捷键说明

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