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

📄 p.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#define	DEF	22	/* lines in chunk: 3*DEF == 66, #lines per nroff page */Biobuf *cons;Biobuf bout;int pglen = DEF;void printfile(int);voidmain(int argc, char *argv[]){	int n;	int f;	if((cons = Bopen("/dev/cons", OREAD)) == 0) {		fprint(2, "p: can't open /dev/cons\n");		exits("missing /dev/cons");	}	Binit(&bout, 1, OWRITE);	n = 0;	while(argc > 1) {		--argc; argv++;		if(*argv[0] == '-'){			pglen = atoi(&argv[0][1]);			if(pglen <= 0)				pglen = DEF;		} else {			n++;			f = open(argv[0], OREAD);			if(f < 0){				fprint(2, "p: can't open %s - %r\n", argv[0]);				continue;			}			printfile(f);			close(f);		}	}	if(n == 0)		printfile(0);	exits(0);}voidprintfile(int f){	int i, j, n;	char *s, *cmd;	Biobuf *b;	b = malloc(sizeof(Biobuf));	Binit(b, f, OREAD);	for(;;){		for(i=1; i <= pglen; i++) {			s = Brdline(b, '\n');			if(s == 0){				n = Blinelen(b);				if(n > 0)	/* line too long for Brdline */					for(j=0; j<n; j++)						Bputc(&bout, Bgetc(b));				else{		/* true EOF */					free(b);					return;				}			}else{				Bwrite(&bout, s, Blinelen(b)-1);				if(i < pglen)					Bwrite(&bout, "\n", 1);			}		}		Bflush(&bout);	    getcmd:		cmd = Brdline(cons, '\n');		if(cmd == 0 || *cmd == 'q')			exits(0);		cmd[Blinelen(cons)-1] = 0;		if(*cmd == '!'){			if(fork() == 0){				dup(Bfildes(cons), 0);				execl("/bin/rc", "rc", "-c", cmd+1, nil);			}			waitpid();			goto getcmd;		}	}}

⌨️ 快捷键说明

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