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

📄 mlmgr.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "common.h"#include "dat.h"int cflag;int aflag;int rflag;int createpipeto(char *alfile, char *user, char *listname, int owner);voidusage(void){	fprint(2, "usage:\t%s -c listname\n", argv0);	fprint(2, "\t%s -[ar] listname addr\n", argv0);	exits("usage");}voidmain(int argc, char **argv){	char *listname, *addr;	String *owner, *alfile;	rfork(RFENVG|RFREND);	ARGBEGIN{	case 'c':		cflag = 1;		break;	case 'r':		rflag = 1;		break;	case 'a':		aflag = 1;		break;	}ARGEND;	if(aflag + rflag + cflag > 1){		fprint(2, "%s: -a, -r, and -c are mutually exclusive\n", argv0);		exits("usage");	}	if(argc < 1)		usage();	listname = argv[0];	alfile = s_new();	mboxpath("address-list", listname, alfile, 0);	if(cflag){		owner = s_copy(listname);		s_append(owner, "-owner");		if(creatembox(listname, nil) < 0)			sysfatal("creating %s's mbox: %r", listname);		if(creatembox(s_to_c(owner), nil) < 0)			sysfatal("creating %s's mbox: %r", s_to_c(owner));		if(createpipeto(s_to_c(alfile), listname, listname, 0) < 0)			sysfatal("creating %s's pipeto: %r", s_to_c(owner));		if(createpipeto(s_to_c(alfile), s_to_c(owner), listname, 1) < 0)			sysfatal("creating %s's pipeto: %r", s_to_c(owner));		writeaddr(s_to_c(alfile), "# mlmgr c flag", 0, listname);	} else if(rflag){		if(argc != 2)			usage();		addr = argv[1];		writeaddr(s_to_c(alfile), "# mlmgr r flag", 0, listname);		writeaddr(s_to_c(alfile), addr, 1, listname);	} else if(aflag){		if(argc != 2)			usage();		addr = argv[1];		writeaddr(s_to_c(alfile), "# mlmgr a flag", 0, listname);		writeaddr(s_to_c(alfile), addr, 0, listname);	} else		usage();	exits(0);}intcreatepipeto(char *alfile, char *user, char *listname, int owner){	String *f;	int fd;	Dir *d;	f = s_new();	mboxpath("pipeto", user, f, 0);	fprint(2, "creating new pipeto: %s\n", s_to_c(f));	fd = create(s_to_c(f), OWRITE, 0775);	if(fd < 0)		return -1;	d = dirfstat(fd);	if(d == nil){		fprint(fd, "Couldn't stat %s: %r\n", s_to_c(f));		return -1;	}	d->mode |= 0775;	if(dirfwstat(fd, d) < 0)		fprint(fd, "Couldn't wstat %s: %r\n", s_to_c(f));	free(d);	fprint(fd, "#!/bin/rc\n");	if(owner)		fprint(fd, "/bin/upas/mlowner %s %s\n", alfile, listname);	else		fprint(fd, "/bin/upas/ml %s %s\n", alfile, user);	close(fd);	return 0;}

⌨️ 快捷键说明

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