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

📄 mail.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
#/* mail command usage	mail		prints your mail	mail people		sends standard input to people */#define	SIGINT	2struct	utmp {	char	name[8];	char	tty;	char	pad1;	int	ltime[2];	int	pad2;};struct	passwd {	char	*pw_name;	char	*pw_passwd;	int	pw_uid;	int	pw_gid;	char	*pw_gecos;	char	*pw_dir;	char	*pw_shell;};char	lettmp[] "/tmp/maxxxxx";char	preptmp[] "/tmp/mbxxxxx";int	pwfil;main(argc, argv)char **argv;{	register me;	extern fout;	register struct passwd *p;	register char *cp;	static struct utmp ubuf;	int uf;	maketemp();	if (argc==1 || argc==2 && argv[1][0]=='-') {		printmail(argc, argv);		delexit();	}	signal(SIGINT, delexit);	fout = creat(lettmp, 0600);	if (((me=ttyn(1))!='x' || (me=ttyn(2))!='x')	 && (uf = open("/etc/utmp", 0)) > 0) {		while (read(uf, &ubuf, sizeof ubuf) == sizeof ubuf)			if (ubuf.tty == me) {				ubuf.name[8] = ' ';				close(uf);				for (cp=ubuf.name; *cp++!=' ';);				*--cp = 0;				bulkmail(argc, argv, ubuf.name);			}	}	me = getuid() & 0377;	setpw();	for (;;)		if ((p = getpwent()) && p->pw_uid == me)			bulkmail(argc, argv, p->pw_name);	fout = 1;	printf("Who are you?\n");	delexit();}printmail(argc, argv)char **argv;{	extern fin, fout;	register n, c, f;	if (fopen(".mail", &fin)>=0 && (c = getchar())) {		do {			putchar(c);		} while (c = getchar());		close(fin);		c = 'y';		if (argc<2) {			if (ttyn(0)!='x') {				printf("Save?");				fin = 0;				c = getchar();			}		} else			c = argv[1][1];		if (c=='y') {			prepend(".mail", "mbox");			printf("Saved mail in 'mbox'\n");		}		close(creat(".mail"));	} else		printf("No mail.\n");}bulkmail(argc, argv, from)char **argv, *from;{	extern fin, fout;	int tbuf[2];	register c;	fin = 0;	(&fin)[1] = 0;	time(tbuf);	printf("From %s %s", from, ctime(tbuf));	while (c = getchar())		putchar(c);	putchar('\n');	flush();	close(fout);	while (--argc > 0)		sendto(*++argv);	delexit();}sendto(person)char *person;{	static saved;	extern fout;	extern fin;	register struct passwd *p;	setpw();	while (p = getpwent()) {		if (equal(p->pw_name, person)) {			if (prepend(lettmp, cat(p->pw_dir, "/.mail"))==0)				break;			return;		}	}	fout = 1;	flush();	printf("Can't send to %s.\n", person);	if (ttyn(0)!='x' && saved==0) {		unlink("dead.letter");		saved++;		printf("Letter saved in 'dead.letter'\n");		prepend(lettmp, "dead.letter");	}}prepend(from, to)char *from, *to;{	extern int fin, fout;	fcreat(preptmp, &fout);	fopen(from, &fin);	while (putchar(getchar()));	close(fin);	fopen(to, &fin);	while (putchar(getchar()));	close(fin);	flush();	close(fout);	if (fcreat(to, &fout) < 0) {		fout = 1;		return(0);	}	fopen(preptmp, &fin);	while(putchar(getchar()));	flush();	close(fout);	close(fin);	fout = 1;	return(1);}setpw(){	extern fin;	if (pwfil == 0) {		fopen("/etc/passwd", &fin);		pwfil = fin;	} else		fin = pwfil;	(&fin)[1] = 0;	seek(fin, 0, 0);}getpwent(){	register char *p;	register c;	static struct passwd passwd;	static char line[100];	extern fin;	p = line;	while((c=getchar()) != '\n') {		if(c <= 0)			return(0);		if(p < line+98)			*p++ = c;	}	*p = 0;	p = line;	passwd.pw_name = p;	p = pwskip(p);	passwd.pw_passwd = p;	p = pwskip(p);	passwd.pw_uid = atoi(p);	p = pwskip(p);	passwd.pw_gid = atoi(p);	p = pwskip(p);	passwd.pw_gecos = p;	p = pwskip(p);	passwd.pw_dir = p;	p = pwskip(p);	passwd.pw_shell = p;	return(&passwd);}pwskip(ap)char *ap;{	register char *p;	p = ap;	while(*p != ':') {		if(*p == 0)			return(p);		p++;	}	*p++ = 0;	return(p);}delexit(){	unlink(lettmp);	unlink(preptmp);	exit(0);}maketemp(){	int i, pid, d;	pid = getpid();	for (i=11; i>=7; --i) {		d = (pid&07) + '0';		lettmp[i] = d;		preptmp[i] = d;		pid =>> 3;	}}equal(as1, as2){	register char *s1, *s2;	s1 = as1;	s2 = as2;	while (*s1++ == *s2)		if (*s2++ == 0)			return(1);	return(0);}cat(ap1, ap2)char *ap1, *ap2;{	register char *p1, *p2;	static char fn[32];	p1 = ap1;	p2 = fn;	while (*p2++ = *p1++);	p2--;	p1 = ap2;	while (*p2++ = *p1++);	return(fn);}

⌨️ 快捷键说明

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