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

📄 tpfs.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include "tapefs.h"/* * File system for tp tapes.  dectape versions have 192 * entries, magtape have 496.  This treats the same * by ignoring entries with bad header checksums */struct tp {	unsigned char	name[32];	unsigned char	mode[2];	unsigned char	uid[1];	unsigned char	gid[1];	unsigned char	unused[1];	unsigned char	size[3];	unsigned char	tmod[4];	unsigned char	taddress[2];	unsigned char	unused2[16];	unsigned char	checksum[2];} dir[496+8];char	buffer[8192];int	tapefile;voidpopulate(char *name){	int i, isabs, badcksum, goodcksum;	struct tp *tpp;	Fileinf f;	replete = 1;	tapefile = open(name, OREAD);	if (tapefile<0)		error("Can't open argument file");	read(tapefile, dir, sizeof dir);	badcksum = goodcksum = 0;	for (i=0, tpp=&dir[8]; i<496; 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) {			badcksum++;			continue;		}		goodcksum++;		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]<<16) + (tpp->size[1]<<0) + (tpp->size[2]<<8);		f.mdate = (tpp->tmod[2]<<0) + (tpp->tmod[3]<<8)		     +(tpp->tmod[0]<<16) + (tpp->tmod[1]<<24);		f.mode = tpp->mode[0]&0777;		f.uid = tpp->uid[0];		f.gid = tpp->gid[0];		isabs = tpp->name[0]=='/';		f.name = (char *)tpp->name+isabs;		poppath(f, 1);	}	fprint(2, "%d bad checksums, %d good\n", badcksum, goodcksum);}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 + -