资源简介
实现思路详见:https://blog.csdn.net/qq_33901011/article/details/100155334 该工程用C语言实现了crontab表达式执行时间,与在线crontab执行时间计算在线工具结果一致,用在嵌入式行业里的设备定时唤醒,定时操作等功能。里面用到了Linux源码中的Crond.c的ParseField函数来解析crontab表达式,基姆拉尔森计算公式计算星期等。

代码片段和文件信息
/*
作者:李猿
联系方式:QQ -- 2573507779
测试方法:
*/
#include “stdlib.h“
#include “string.h“
#include “stdio.h“
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
#define DEBUG_LINE() printf(“FUN:%s LINE:%d TIME:%s\r\n“ __FUNCTION__ __LINE__ __TIME__)//
//时间 的临时变量,以计算下次唤醒的时间节点
struct data_time_str
{
//uint8_t sec;
uint8_t min;
uint8_t hour;
uint8_t day;
uint8_t month;
uint16_t year;
uint8_t week;
};
static const char *const DowAry[] = {
“sun“
“mon“
“tue“
“wed“
“thu“
“fri“
“sat“
“Sun“
“Mon“
“Tue“
“Wed“
“Thu“
“Fri“
“Sat“
NULL
};
static const char *const MonAry[] = {
“jan“
“feb“
“mar“
“apr“
“may“
“jun“
“jul“
“aug“
“sep“
“oct“
“nov“
“dec“
“Jan“
“Feb“
“Mar“
“Apr“
“May“
“Jun“
“Jul“
“Aug“
“Sep“
“Oct“
“Nov“
“Dec“
NULL
};
typedef struct CronLine
{
char cl_Mins[60]; /* 0-59 */
char cl_Hrs[24]; /* 0-23 */
char cl_Days[32]; /* 0-31 */
char cl_Mons[12]; /* 0-11 */
char cl_Dow[7]; /* 0-6 beginning sunday */
} CronLine;
static char *ParseField(char *user char *ary int modvalue int off
const char *const *names char *ptr)
{
char *base = ptr;
int n1 = -1;
int n2 = -1;
if (base == NULL) {
return (NULL);
}
while (*ptr != ‘ ‘ && *ptr != ‘\t‘ && *ptr != ‘\n‘) {
int skip = 0;
/* Handle numeric digit or symbol or ‘*‘ */
if (*ptr == ‘*‘) {
n1 = 0; /* everything will be filled */
n2 = modvalue - 1;
skip = 1;
++ptr;
} else if (*ptr >= ‘0‘ && *ptr <= ‘9‘) {
if (n1 < 0) {
n1 = strtol(ptr &ptr 10) + off;
} else {
n2 = strtol(ptr &ptr 10) + off;
}
skip = 1;
} else if (names) {
int i;
for (i = 0; names[i]; ++i) {
if (strncmp(ptr names[i] strlen(names[i])) == 0) {
break;
}
}
if (names[i]) {
ptr += strlen(names[i]);
if (n1 < 0) {
n1 = i;
} else {
n2 = i;
}
skip = 1;
}
}
/* handle optional range ‘-‘ */
if (skip == 0) {
printf(“ failed user %s parsing %s\n“ user base);
DEBUG_LINE();
return (NULL);
}
if (*ptr == ‘-‘ && n2 < 0) {
++ptr;
continue;
}
/*
* collapse single-value ranges handle skipmark and fill
* in the character array appropriately.
*/
if (n2 < 0) {
n2 = n1;
}
if (*ptr == ‘/‘) {
skip = strtol(ptr + 1 &ptr 10);
}
/*
* fill array using a failsafe is the easiest way to prevent
* an endless loop
*/
{
int s0 = 1;
int failsafe = 1024;
--n1;
do {
n1 = (n1 + 1) % modvalue;
if (--s0 == 0) {
ary[n1 % modvalue] = 1;
s0 = skip;
}
}
while (n1 !=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-08-30 11:31 寻找唤醒时间节点\
目录 0 2019-08-30 10:07 寻找唤醒时间节点\Debug\
文件 32256 2019-08-30 13:13 寻找唤醒时间节点\Debug\寻找唤醒时间节点.exe
文件 454356 2019-08-30 13:13 寻找唤醒时间节点\Debug\寻找唤醒时间节点.ilk
文件 437248 2019-08-30 13:13 寻找唤醒时间节点\Debug\寻找唤醒时间节点.pdb
目录 0 2019-08-30 10:05 寻找唤醒时间节点\ipch\
目录 0 2019-08-30 10:05 寻找唤醒时间节点\ipch\寻找唤醒时间节点-4b2a15d9\
文件 2359296 2019-08-30 10:05 寻找唤醒时间节点\ipch\寻找唤醒时间节点-4b2a15d9\寻找唤醒时间节点-a3f58340.ipch
目录 0 2019-08-30 10:07 寻找唤醒时间节点\寻找唤醒时间节点\
目录 0 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\
文件 1338 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\cl.command.1.tlog
文件 3890 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\CL.read.1.tlog
文件 612 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\CL.write.1.tlog
文件 2 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 2 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 2 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 2 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 2 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 2 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 1544 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 3048 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 826 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\li
文件 23768 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\main.obj
文件 406 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\mt.command.1.tlog
文件 346 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\mt.read.1.tlog
文件 346 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\mt.write.1.tlog
文件 566 2019-08-30 10:07 寻找唤醒时间节点\寻找唤醒时间节点\Debug\rc.command.1.tlog
文件 318 2019-08-30 10:07 寻找唤醒时间节点\寻找唤醒时间节点\Debug\rc.read.1.tlog
文件 326 2019-08-30 10:07 寻找唤醒时间节点\寻找唤醒时间节点\Debug\rc.write.1.tlog
文件 52224 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\vc100.idb
文件 69632 2019-08-30 13:13 寻找唤醒时间节点\寻找唤醒时间节点\Debug\vc100.pdb
............此处省略15个文件信息
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论