资源简介
实现思路详见: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语言快速入门简单概要
- nRF24L01P入门全面解析附带C语言程序
- C语言经典排序方法及动图演示
- C语言内存四区
- PS2键盘、鼠标与at89c51单片机的通信设
- MD5算法C++实现
- 《严蔚敏:数据结构题集(C语言版)
- C语言键盘记录程序
- c语言版超级玛丽(经典游戏)
- 黄金矿工C语言
- c++贪吃蛇编程源代码论文设计c语言
- C语言大全(第四版)
- 计算机网络课程设计农大socket实现F
- 小甲鱼C语言课件+源代码
- 是DBSCAN聚类算法的C++实现代码可以运
- 江苏C语言二级试题真题集
- 水中机器鱼代码
- STC12C5410AD中文文档C语言版
- VC++实现灰度图像的6种边缘检测算子
- PageRank/C++
- c++实现关联规则Apriori算法
- 家族关系查询系统
- C语言写的音乐播放器(含源码注释)
- 嵌入式web服务器boa_C语言/Python + HTML
- 《数据结构题集C语言版》严蔚敏,吴
- 24 个C语言项目案例分析源码+使用说明
- 学生选课管理系统C++实现
- 蒙特卡洛积分方法 C语言
- 安徽大学操作系统实验四主存空间的
- C语言程序设计课程教学课件
评论
共有 条评论