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

📄 fmt.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <thread.h>#include <sunrpc.h>/* * print formatters */intsunRpcFmt(Fmt *f){	SunRpc *rpc;	rpc = va_arg(f->args, SunRpc*);	sunRpcPrint(f, rpc);	return 0;}static SunProg **fmtProg;static int nfmtProg;static RWLock fmtLock;voidsunFmtInstall(SunProg *p){	int i;	wlock(&fmtLock);	for(i=0; i<nfmtProg; i++){		if(fmtProg[i] == p){			wunlock(&fmtLock);			return;		}	}	if(nfmtProg%16 == 0)		fmtProg = erealloc(fmtProg, sizeof(fmtProg[0])*(nfmtProg+16));	fmtProg[nfmtProg++] = p;	wunlock(&fmtLock);}intsunCallFmt(Fmt *f){	int i;	void (*fmt)(Fmt*, SunCall*);	SunCall *c;	SunProg *p;	c = va_arg(f->args, SunCall*);	rlock(&fmtLock);	for(i=0; i<nfmtProg; i++){		p = fmtProg[i];		if(p->prog == c->rpc.prog && p->vers == c->rpc.vers){			runlock(&fmtLock);			if(c->type < 0 || c->type >= p->nproc || (fmt=p->proc[c->type].fmt) == nil)				return fmtprint(f, "unknown proc %c%d", "TR"[c->type&1], c->type>>1);			(*fmt)(f, c);			return 0;		}	}	runlock(&fmtLock);	fmtprint(f, "<sunrpc %d %d %c%d>", c->rpc.prog, c->rpc.vers, "TR"[c->type&1], c->type>>1);	return 0;}

⌨️ 快捷键说明

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