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

📄 atrun.c

📁 操作系统源代码
💻 C
字号:
/* atrun - perform the work 'at' has squirreled away	Author: Jan Looyen *//*-------------------------------------------------------------------------* *	atrun scans directory /usr/spool/at for 'at' jobs to be executed.  * *	Finished jobs have been moved to directory /usr/spool/at/past.     * *-------------------------------------------------------------------------*/#include <sys/types.h>#include <sys/dir.h>#include <sys/stat.h>#include <fcntl.h>#include <limits.h>#include <time.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdio.h>#include <dirent.h>_PROTOTYPE(int main, (void));int main(){  char realtime[15], procname[35], procpast[35];  DIR *dir;  struct dirent *entry;  struct tm *p;  struct stat sbuf;  time_t clk;/*-------------------------------------------------------------------------* *	Compute real time,  move 'at' jobs whose filenames < real time to  * *	/usr/spool/at/past and start a sh for each job.			   * *-------------------------------------------------------------------------*/  time(&clk);  p = localtime(&clk);  sprintf(realtime, "%02d.%03d.%02d%02d.00",	p->tm_year % 100, p->tm_yday, p->tm_hour, p->tm_min);  if ((dir = opendir("/usr/spool/at")) != NULL)	while ((entry = readdir(dir)) != NULL)		if (entry->d_ino > 0 &&		    entry->d_name[0] != '.' &&		    entry->d_name[0] != 'p' &&		strncmp(entry->d_name, realtime, (size_t) 11) <= 0) {			sprintf(procname, "/usr/spool/at/%s", entry->d_name);			sprintf(procpast, "/usr/spool/at/past/%s", entry->d_name);			if (fork() == 0)	/* code for child */				if (link(procname, procpast) == 0) {	/* link ok? */					unlink(procname);					stat(procpast, &sbuf);					setgid(sbuf.st_gid);					setuid(sbuf.st_uid);					execl("/bin/sh", "sh", procpast, (char *) 0);					fprintf(stderr, "proc %s can't start\n", procpast);					exit(1);				}		}  return(0);}

⌨️ 快捷键说明

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