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

📄 binit.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	<u.h>#include	<libc.h>#include	<bio.h>static	Biobufhdr*	wbufs[20];static	int		atexitflag;staticvoidbatexit(void){	Biobufhdr *bp;	int i;	for(i=0; i<nelem(wbufs); i++) {		bp = wbufs[i];		if(bp != 0) {			wbufs[i] = 0;			Bflush(bp);		}	}}staticvoiddeinstall(Biobufhdr *bp){	int i;	for(i=0; i<nelem(wbufs); i++)		if(wbufs[i] == bp)			wbufs[i] = 0;}staticvoidinstall(Biobufhdr *bp){	int i;	deinstall(bp);	for(i=0; i<nelem(wbufs); i++)		if(wbufs[i] == 0) {			wbufs[i] = bp;			break;		}	if(atexitflag == 0) {		atexitflag = 1;		atexit(batexit);	}}intBinits(Biobufhdr *bp, int f, int mode, uchar *p, int size){	p += Bungetsize;	/* make room for Bungets */	size -= Bungetsize;	switch(mode&~(OCEXEC|ORCLOSE|OTRUNC)) {	default:		fprint(2, "Binits: unknown mode %d\n", mode);		return Beof;	case OREAD:		bp->state = Bractive;		bp->ocount = 0;		break;	case OWRITE:		install(bp);		bp->state = Bwactive;		bp->ocount = -size;		break;	}	bp->bbuf = p;	bp->ebuf = p+size;	bp->bsize = size;	bp->icount = 0;	bp->gbuf = bp->ebuf;	bp->fid = f;	bp->flag = 0;	bp->rdline = 0;	bp->offset = 0;	bp->runesize = 0;	return 0;}intBinit(Biobuf *bp, int f, int mode){	return Binits(bp, f, mode, bp->b, sizeof(bp->b));}Biobuf*Bopen(char *name, int mode){	Biobuf *bp;	int f;	switch(mode&~(OCEXEC|ORCLOSE|OTRUNC)) {	default:		fprint(2, "Bopen: unknown mode %#x\n", mode);		return 0;	case OREAD:		f = open(name, mode);		if(f < 0)			return 0;		break;	case OWRITE:		f = create(name, mode, 0666);		if(f < 0)			return 0;	}	bp = malloc(sizeof(Biobuf));	Binits(bp, f, mode, bp->b, sizeof(bp->b));	bp->flag = Bmagic;	return bp;}intBterm(Biobufhdr *bp){	deinstall(bp);	Bflush(bp);	if(bp->flag == Bmagic) {		bp->flag = 0;		close(bp->fid);		free(bp);	}	return 0;}

⌨️ 快捷键说明

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