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

📄 fworm.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	"all.h"#define	DEBUG		0#define	FDEV(d)		(d->fw.fw)Devsizefwormsize(Device *d){	Device *fdev;	Devsize l;	fdev = FDEV(d);	l = devsize(fdev);	l -= l/(BUFSIZE*8) + 1;	return l;}voidfwormream(Device *d){	Iobuf *p;	Device *fdev;	Off a, b;	print("fworm ream\n");	devinit(d);	fdev = FDEV(d);	a = fwormsize(d);	b = devsize(fdev);	print("	fwsize = %lld\n", (Wideoff)a);	print("	bwsize = %lld\n", (Wideoff)b-a);	for(; a < b; a++) {		p = getbuf(fdev, a, Bmod|Bres);		if(!p)			panic("fworm: init");		memset(p->iobuf, 0, RBUFSIZE);		settag(p, Tvirgo, a);		putbuf(p);	}}voidfworminit(Device *d){	print("fworm init\n");	devinit(FDEV(d));}intfwormread(Device *d, Off b, void *c){	Iobuf *p;	Device *fdev;	Devsize l;	if(DEBUG)		print("fworm read  %lld\n", (Wideoff)b);	fdev = FDEV(d);	l = devsize(fdev);	l -= l/(BUFSIZE*8) + 1;	if(b >= l)		panic("fworm: rbounds %lld\n", (Wideoff)b);	l += b/(BUFSIZE*8);	p = getbuf(fdev, l, Bread|Bres);	if(!p || checktag(p, Tvirgo, l))		panic("fworm: checktag %lld\n", (Wideoff)l);	l = b % (BUFSIZE*8);	if(!(p->iobuf[l/8] & (1<<(l%8)))) {		putbuf(p);		print("fworm: read %lld\n", (Wideoff)b);		return 1;	}	putbuf(p);	return devread(fdev, b, c);}intfwormwrite(Device *d, Off b, void *c){	Iobuf *p;	Device *fdev;	Devsize l;	if(DEBUG)		print("fworm write %lld\n", (Wideoff)b);	fdev = FDEV(d);	l = devsize(fdev);	l -= l/(BUFSIZE*8) + 1;	if(b >= l)		panic("fworm: wbounds %lld\n", (Wideoff)b);	l += b/(BUFSIZE*8);	p = getbuf(fdev, l, Bread|Bmod|Bres);	if(!p || checktag(p, Tvirgo, l))		panic("fworm: checktag %lld", (Wideoff)l);	l = b % (BUFSIZE*8);	if((p->iobuf[l/8] & (1<<(l%8)))) {		putbuf(p);		print("fworm: write %lld\n", (Wideoff)b);		return 1;	}	p->iobuf[l/8] |= 1<<(l%8);	putbuf(p);	return devwrite(fdev, b, c);}

⌨️ 快捷键说明

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