📄 mycron.c
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>#define MAXLINENO 5int lineno,fd,txt_i,inline_i,i,pos,c,length;char smin[5], shour[5], sday[5], smonth[5], sweek[5], contxt[300], oneline[60];char nweek[5],nmonth[5],nday[5],nhour[5],nmin[5];char currenttime[30];struct { char time[30]; char cmd[30]; } line[MAXLINENO];int find_task(){ if(fd=open("./crondir/b02051.cron",O_RDONLY,S_IROTH|S_IWOTH)<0) printf("Open cron file error"); lseek(fd,0,SEEK_SET); length=read(fd,contxt,300); inline_i=0; lineno=0; c=0; for(i=0;i<3;i++) { nweek[c++]=currenttime[i]; } c=0; for(i=4;i<7;i++) { nmonth[c++]=currenttime[i]; } c=0; for(i=8;i<10;i++) { nday[c++]=currenttime[i]; } c=0; for(i=11;i<13;i++) { nhour[c++]=currenttime[i]; } c=0; for(i=14;i<16;i++) { nmin[c++]=currenttime[i]; } for(txt_i=0;txt_i<length;txt_i++) { oneline[inline_i++]=contxt[txt_i]; if(contxt[txt_i]=='\n') { pos=1; c=0; for(i=0;i<inline_i;i++) { switch(pos) { case 1: if(oneline[i]=='*') { strcpy(smin,nmin); pos++; i++; break; } if(oneline[i]!=' ') smin[c++]=oneline[i]; else { pos++; c=0; } break; case 2: if(oneline[i]=='*') { strcpy(shour,nhour); pos++; i++; break; } if(oneline[i]!=' ') shour[c++]=oneline[i]; else { pos++; c=0; } break; case 3: if(oneline[i]=='*') { strcpy(sday,nday); pos++; i++; break; } if(oneline[i]!=' ') sday[c++]=oneline[i]; else { pos++; c=0; } break; case 4: if(oneline[i]=='*') { strcpy(smonth,nmonth); pos++; i++; break; } if(oneline[i]!=' ') smonth[c++]=oneline[i]; else { pos++; c=0; } break; case 5: if(oneline[i]=='*') { strcpy(sweek,nweek); pos++; i++; break; } if(oneline[i]!=' ') sweek[c++]=oneline[i]; else { pos++; c=0; } break; case 6: line[lineno].cmd[c++]=oneline[i]; break; } } sprintf(line[lineno].time,"%s %s %s %s:%s:00 2004\n",sweek,smonth,sday,shour,smin); inline_i=0; lineno++; } } return 1;}void align(){ time_t now; int i; char nowtime[30]; time(&now); sprintf(nowtime,"%s",ctime(&now)); for(i=0;nowtime[i]!='\n';i++) nowtime[i]=nowtime[i+17]; i=atoi(nowtime); sleep(60-i);}int timecmp(char a[], char b[]){ int i; for(i = 0;i<16;i++) if(a[i]!=b[i]) return 0; return 1;}int main(void){ int i, alignfactor; time_t now; while(1) { align(); for(alignfactor=0;alignfactor<60;alignfactor++) { time(&now); sprintf(currenttime,"%s",ctime(&now)); find_task(); for(i=0;i!=lineno;i++) { if(timecmp(line[i].time,currenttime)) system(line[i].cmd); } sleep(60); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -