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

📄 atrun.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * Run programs submitted by at. */#include <stdio.h>#include <sys/types.h>#include <sys/dir.h>#include <time.h>#include <sys/stat.h># define DIR "/usr/spool/at"# define PDIR	"past"# define LASTF "/usr/spool/at/lasttimedone"int	nowtime;int	nowdate;int	nowyear;main(argc, argv)char **argv;{	int tt, day, year, uniq;	struct direct dirent;	char file[DIRSIZ+1];	FILE *dirf;	chdir(DIR);	makenowtime();	if ((dirf = fopen(".", "r")) == NULL) {		fprintf(stderr, "Cannot read at directory\n");		exit(1);	}	while (fread((char *)&dirent, sizeof(dirent), 1, dirf) == 1) {		if (dirent.d_ino==0)			continue;		strncpy(file, dirent.d_name, DIRSIZ);		file[DIRSIZ] = '\0';		if (sscanf(file, "%2d.%3d.%4d.%2d", &year, &day, &tt, &uniq) != 4)			continue;		if (nowyear < year)			continue;		if (nowyear==year && nowdate < day)			continue;		if (nowyear==year && nowdate==day && nowtime < tt)			continue;		run(file);	}	fclose(dirf);	updatetime(nowtime);	exit(0);}makenowtime(){	long t;	struct tm *localtime();	register struct tm *tp;	time(&t);	tp = localtime(&t);	nowtime = tp->tm_hour*100 + tp->tm_min;	nowdate = tp->tm_yday;	nowyear = tp->tm_year;}updatetime(t){	FILE *tfile;	tfile = fopen(LASTF, "w");	if (tfile == NULL) {		fprintf(stderr, "can't write lastfile\n");		exit(1);	}	fprintf(tfile, "%04d\n", t);}run(file)char *file;{	struct stat stbuf;	register pid, i;	char sbuf[64];	if (fork()!=0)		return;	for (i=0; i<15; i++)		close(i);	dup(dup(open("/dev/null", 0)));	sprintf(sbuf, "/bin/mv %.14s %s", file, PDIR);	system(sbuf);	chdir(PDIR);	if (stat(file, &stbuf) == -1)		exit(1);	setgid(stbuf.st_gid);	setuid(stbuf.st_uid);	if (pid = fork()) {		if (pid == -1)			exit(1);		wait((int *)0);		unlink(file);		exit(0);	}	nice(3);	execl("/bin/sh", "sh", file, 0);	execl("/usr/bin/sh", "sh", file, 0);	fprintf(stderr, "Can't execl shell\n");	exit(1);}

⌨️ 快捷键说明

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