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

📄 comm.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#define LB 2048int	one;int	two;int	three;char	*ldr[3];Biobuf *ib1;Biobuf *ib2;Biobuf *openfil(char*);int	rd(Biobuf*, char*);void	wr(char*, int);void	copy(Biobuf*, char*, int);int	compare(char*, char*);voidmain(int argc, char *argv[]){	int l;	char	lb1[LB],lb2[LB];	ldr[0] = "";	ldr[1] = "\t";	ldr[2] = "\t\t";	l = 1;	ARGBEGIN{	case '1':		if(!one) {			one = 1;			ldr[1][0] =			ldr[2][l--] = '\0';		}		break;	case '2':		if(!two) {			two = 1;			ldr[2][l--] = '\0';		}		break;	case '3':		three = 1;		break;	default:		goto Usage;	}ARGEND	if(argc < 2) {    Usage:		fprint(2, "usage: comm [-123] file1 file2\n");		exits("usage");	}	ib1 = openfil(argv[0]);	ib2 = openfil(argv[1]);	if(rd(ib1,lb1) < 0){		if(rd(ib2,lb2) < 0)			exits(0);		copy(ib2,lb2,2);	}	if(rd(ib2,lb2) < 0)		copy(ib1,lb1,1);	for(;;){		switch(compare(lb1,lb2)) {		case 0:			wr(lb1,3);			if(rd(ib1,lb1) < 0) {				if(rd(ib2,lb2) < 0)					exits(0);				copy(ib2,lb2,2);			}			if(rd(ib2,lb2) < 0)				copy(ib1,lb1,1);			continue;		case 1:			wr(lb1,1);			if(rd(ib1,lb1) < 0)				copy(ib2,lb2,2);			continue;		case 2:			wr(lb2,2);			if(rd(ib2,lb2) < 0)				copy(ib1,lb1,1);			continue;		}	}}intrd(Biobuf *file, char *buf){	int i, c;	i = 0;	while((c = Bgetc(file)) != Beof) {		*buf = c;		if(c == '\n' || i > LB-2) {			*buf = '\0';			return 0;		}		i++;		buf++;	}	return -1;}voidwr(char *str, int n){	switch(n){		case 1:			if(one)				return;			break;		case 2:			if(two)				return;			break;		case 3:			if(three)				return;	}	print("%s%s\n", ldr[n-1],str);}voidcopy(Biobuf *ibuf, char *lbuf, int n){	do		wr(lbuf,n);	while(rd(ibuf,lbuf) >= 0);	exits(0);}intcompare(char *a, char *b){	while(*a == *b){		if(*a == '\0')			return 0;		a++;		b++;	}	if(*a < *b)		return 1;	return 2;}Biobuf*openfil(char *s){	Biobuf *b;	if(s[0]=='-' && s[1]==0)		s = "/fd/0";	b = Bopen(s, OREAD);	if(b)		return b;	fprint(2,"comm: cannot open %s: %r\n",s);	exits("open");	return 0;	/* shut up ken */}

⌨️ 快捷键说明

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