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

📄 tapfs.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "tapefs.h"/* * File system for old tap tapes. */struct tap {	unsigned char	name[32];	unsigned char	mode[1];	unsigned char	uid[1];	unsigned char	size[2];	unsigned char	tmod[4];	unsigned char	taddress[2];	unsigned char	unused[20];	unsigned char	checksum[2];} dir[192];int	tapefile;char	buffer[8192];long	cvtime(unsigned char *);extern	int verbose;extern	int newtap;voidpopulate(char *name){	int i, isabs;	struct tap *tpp;	Fileinf f;	replete = 1;	tapefile = open(name, OREAD);	if (tapefile<0)		error("Can't open argument file");	read(tapefile, dir, sizeof dir);	for (i=0, tpp=&dir[8]; i<192; i++, tpp++) {		unsigned char *sp = (unsigned char *)tpp;		int j, cksum = 0;		for (j=0; j<32; j++, sp+=2)			cksum += sp[0] + (sp[1]<<8);		cksum &= 0xFFFF;		if (cksum!=0) {			print("cksum failure\n");			continue;		}		if (tpp->name[0]=='\0')			continue;		f.addr = tpp->taddress[0] + (tpp->taddress[1]<<8);		if (f.addr==0)			continue;		f.size = tpp->size[0] + (tpp->size[1]<<8);		f.mdate = cvtime(tpp->tmod);		f.mode = tpp->mode[0]&0777;		f.uid = tpp->uid[0]&0377;		isabs = tpp->name[0]=='/';		f.name = (char *)tpp->name+isabs;		if (verbose)			print("%s mode %o uid %d, %s", f.name, f.mode, f.uid, ctime(f.mdate));		poppath(f, 1);	}}longcvtime(unsigned char *tp){	unsigned long t = (tp[1]<<24)+(tp[0]<<16)+(tp[3]<<8)+(tp[2]<<0);	if (!newtap) {		t /= 60;		t += 3*365*24*3600;	}	return t;}voidpopdir(Ram *r){	USED(r);}voiddotrunc(Ram *r){	USED(r);}voiddocreate(Ram *r){	USED(r);}char *doread(Ram *r, vlong off, long cnt){	if (cnt>sizeof(buffer))		print("count too big\n");	seek(tapefile, 512*r->addr+off, 0);	read(tapefile, buffer, cnt);	return buffer;}voiddowrite(Ram *r, char *buf, long off, long cnt){	USED(r); USED(buf); USED(off); USED(cnt);}intdopermw(Ram *r){	USED(r);	return 0;}

⌨️ 快捷键说明

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