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

📄 vactest.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "stdinc.h"#include "vac.h"#include "dat.h"#include "fns.h"void usage(void);int unvac(VacFS *fs);int readScore(int fd, uchar score[VtScoreSize]);static void warn(char *fmt, ...);void dirlist(VacFS *fs, char *path);static	int	nwant;static	char	**want;static	int	dflag = 1;static	int	cflag;static	int	lower;static	int	verbose;static	int	settimes;voidmain(int argc, char *argv[]){	char *zfile;	int ok, table;	VtSession *z;	char *vsrv = nil;	char *host = nil;	char *p;	int ncache = 1000;	VacFS *fs;	table = 0;	zfile = nil;	ARGBEGIN{	case 'D':		dflag++;		break;	case 'c':		cflag++;		break;	case 'C':		p = ARGF();		if(p == nil)			usage();		ncache = atoi(p);		if(ncache < 10)			ncache = 10;		if(ncache > 1000000)			ncache = 1000000;		break;	case 'i':		lower++;		break;	case 'f':		zfile = ARGF();		if(zfile == nil)			usage();		break;	case 'h':		host = ARGF();		break;	case 't':		table++;		break;	case 'T':		settimes++;		break;	case 's':		vsrv = ARGF();		break;	case 'v':		verbose++;		break;	default:		usage();		break;	}ARGEND	nwant = argc;	want = argv;	vtAttach();	if(zfile == nil)		usage();	if(vsrv != nil)		z = vtStdioServer(vsrv);	else		z = vtDial(host);	if(z == nil)		vtFatal("could not connect to server: %s", vtGetError());	vtSetDebug(z, 0);	if(!vtConnect(z, 0))		vtFatal("vtConnect: %s", vtGetError());	fs = vfsOpen(z, zfile, 1, ncache);	if(fs == nil)		vtFatal("vfsOpen: %s", vtGetError());	ok = unvac(fs);	vtClose(z);	vtDetach();		exits(ok? 0 : "error");}voidusage(void){	fprint(2, "usage: %s [-tTcDv] -f zipfile [-s ventid] [-h host] [file ...]\n", argv0);	exits("usage");}voidsuck(VacFile *f){	USED(f);}voidvacfile(VacFS *fs, char *path, VacDir *vd){	char *path2;	path2 = vtMemAlloc(strlen(path) + 1 + strlen(vd->elem) + 1);	if(path[1] == 0)		sprintf(path2, "/%s", vd->elem);	else		sprintf(path2, "%s/%s", path, vd->elem);fprint(2, "vac file: %s\n", path2);	if(vd->mode & ModeDir)		dirlist(fs, path2);	vtMemFree(path2);}voiddirlist(VacFS *fs, char *path){	VacDir vd[50];	VacDirEnum *ds;	int i, n;	ds = vdeOpen(fs, path);	if(ds == nil) {		fprint(2, "could not open: %s: %s\n", path, vtGetError());		return;	}	for(;;) {		n = vdeRead(ds, vd, sizeof(vd)/sizeof(VacDir));		if(n < 0) {			warn("vdRead failed: %s: %s", path, vtGetError());			return;		}		if(n == 0)			break;		for(i=0; i<n; i++) {			vacfile(fs, path, &vd[i]);			vdCleanup(&vd[i]);		}	}	vdeFree(ds);}intunvac(VacFS *fs){	dirlist(fs, "/");	return 1;}static voidwarn(char *fmt, ...){	va_list arg;	va_start(arg, fmt);	fprint(2, "%s: ", argv0);	vfprint(2, fmt, arg);	fprint(2, "\n");	va_end(arg);}

⌨️ 快捷键说明

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