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

📄 mkdb.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <ctype.h>Biobuf in;Biobuf out;enum{	Empty,	Sys,	Dk,	Ip,	Domain,};intiscomment(char *name){	return *name == '#';}/* *  is this a fully specified datakit name? */intisdk(char *name){	int slash;	slash = 0;	for(; *name; name++){		if(isalnum(*name))			continue;		if(*name == '/'){			slash = 1;			continue;		}		return 0;	}	return slash;}/* *  Is this an internet domain name? */intisdomain(char *name){	int dot = 0;	int alpha = 0;	for(; *name; name++){		if(isalpha(*name) || *name == '-'){			alpha = 1;			continue;		}		if(*name == '.'){			dot = 1;			continue;		}		if(isdigit(*name))			continue;		return 0;	}	return dot && alpha;}/* *  is this an ip address? */intisip(char *name){	int dot = 0;	for(; *name; name++){		if(*name == '.'){			dot = 1;			continue;		}		if(isdigit(*name))			continue;		return 0;	}	return dot;}char tup[64][64];int ttype[64];int ntup;voidtprint(void){	int i, tab;	char *p;	tab = 0;	for(i = 0; i < ntup; i++){		if(ttype[i] == Sys){			Bprint(&out, "sys = %s\n", tup[i]);			tab = 1;			ttype[i] = Empty;			break;		}	}	for(i = 0; i < ntup; i++){		if(ttype[i] == Empty)			continue;		if(tab)			Bprint(&out, "\t");		tab = 1;		switch(ttype[i]){		case Domain:			Bprint(&out, "dom=%s\n", tup[i]);			break;		case Ip:			Bprint(&out, "ip=%s\n", tup[i]);			break;		case Dk:			p = strrchr(tup[i], '/');			if(p){				p++;				if((*p == 'C' || *p == 'R')				&& strncmp(tup[i], "nj/astro/", p-tup[i]) == 0)					Bprint(&out, "flavor=console ");			}			Bprint(&out, "dk=%s\n", tup[i]);			break;		case Sys:			Bprint(&out, "sys=%s\n", tup[i]);			break;		}	}}#define NFIELDS 64/* *  make a database file from a merged uucp/inet database */voidmain(void){	int n, i, j;	char *l;	char *fields[NFIELDS];	int ftype[NFIELDS];	int same, match;	Binit(&in, 0, OREAD);	Binit(&out, 1, OWRITE);	ntup = 0;	while(l = Brdline(&in, '\n')){		l[Blinelen(&in)-1] = 0;		n = getfields(l, fields, NFIELDS, 1, " \t");		same = 0;		for(i = 0; i < n; i++){			if(iscomment(fields[i])){				n = i;				break;			}			if(isdomain(fields[i])){				ftype[i] = Domain;				for(j = 0; j < ntup; j++)					if(ttype[j] == Domain && strcmp(fields[i], tup[j]) == 0){						same = 1;						ftype[i] = Empty;						break;					}			} else if(isip(fields[i]))				ftype[i] = Ip;			else if(isdk(fields[i]))				ftype[i] = Dk;			else				ftype[i] = Sys;		}		if(!same && ntup){			tprint();			ntup = 0;		}		for(i = 0; i < n; i++){			match = 0;			for(j = 0; j < ntup; j++){				if(ftype[i] == ttype[j] && strcmp(fields[i], tup[j]) == 0){					match = 1;					break;				}			}			if(!match){				ttype[ntup] = ftype[i];				strcpy(tup[ntup], fields[i]);				ntup++;			}		}	}	if(ntup)		tprint();	exits(0);}

⌨️ 快捷键说明

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