公司有个嵌入式低功耗项目,项目需求中有一项是仿照Linux cron task的定时设置,作为设备定时唤醒时间。于是就自己琢磨写了C语言的Crontab表达式执行时间,各种调试结果与crontab执行时间在线工具一致。用到了基姆拉尔森计算公式计算星期,Linux源码中的Crond.c文件的ParseField函数。希望能对同行有帮助。
crontab表达式的知识请自行百度。
先讲讲实现思路:
1、参考Linux源码中的Crond.c文件的static char *ParseField(char *user, char *ary, int modvalue, int off,const char *const *names, char *ptr);函数,将crontab表达式解析成结构体CronLine中的分钟数组,小时数组,日期数组,月份数组和星期数组,并对其对应项赋值为1.

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);

2、写一个函数,函数功能:调用一次,时间加1分钟。
3、从当前时间(先输入设置时间,当然可以改成获取系统时间)向后一分钟一分钟的遍历,满足条件后把满足条件的时间打印出来。

 //寻找满足crond条件的时间点uint8_t GetWakeUpTimePoint(CronLine *pline,struct data_time_str *p_data){if((pline->cl_Mins[p_data->min] == 1)&& (pline->cl_Hrs[p_data->hour] == 1)&& (pline->cl_Days[p_data->day] == 1)&& (pline->cl_Mons[p_data->month] == 1)&& (pline->cl_Dow[p_data->week] == 1)){printf("%04d年%02d月%02d日  %02d:%02d:00   星期%d\r\n",p_data->year,p_data->month,p_data->day,p_data->hour,p_data->min,p_data->week);return 1;}return 0;}int main(){CronLine line = {0};char *ptr;/*buf:Crontab表达式*/char buf[] = "0 0 1,20 * * "; //0 18 * * * //10 5 */5 * *ptr = ParseField("Mins", line.cl_Mins, 60, 0, NULL, buf);ptr = ParseField("Hrs", line.cl_Hrs, 24, 0, NULL, ptr);ptr = ParseField("Days", line.cl_Days, 32, 0, NULL, ptr);ptr = ParseField("Mons", line.cl_Mons, 12, -1, MonAry, ptr);ptr = ParseField("Week", line.cl_Dow, 7, 0, DowAry, ptr);if (ptr == NULL) {printf("It's over\r\n");}/*uint8_t min;uint8_t hour;uint8_t day;uint8_t month;uint16_t year;*///先定义个时间初始值//struct data_time_str CalcDataTime = {34,9,30,8,2019,4}; //获取当前时间SYSTEMTIME st;GetLocalTime(&st);struct data_time_str CalcDataTime = {0};CalcDataTime.year = st.wYear;CalcDataTime.month = st.wMonth;CalcDataTime.day = st.wDay;CalcDataTime.hour = st.wHour;CalcDataTime.min = st.wMinute;uint32_t cnt = 0; //做个循环限制 uint8_t getcnt = 0; //记录找到唤醒时间的次数 while((cnt < 0xFFFFFFFF) && (getcnt <= 10)){cnt++;UpdateTimeBuf(&CalcDataTime);if(GetWakeUpTimePoint(&line,&CalcDataTime)){getcnt++;}           }system("pause");return 0;}

有任何问题联系低调奢华猿QQ:2573507779
源码:https://download.csdn.net/download/qq_33901011/11643934
工程用VS2010打开直接编译运行就可以,也可以用DevC++直接打开main,cpp编译运行看结果。

C语言实现了crontab表达式执行时间相关推荐

  1. go语言实现分布式crontab任务系统

    写在前面 最近离职交接空档期,在慕课网上学习了下go语言实现分布式crontab任务调度系统.自己也跟随视频实现了一把(跟原版略有不同).现把成果记录一下. 最终代码: https://github. ...

  2. 在线常用crontab表达式大全验证解析

    在线常用crontab表达式大全验证解析 在线常用crontab表达式大全验证解析 本工具可以在线模拟Crontab表达式的执行时间并且收集整理了常用的Crontab表达式. 本工具可以在线模拟Cro ...

  3. quartz/Cron/Crontab表达式在线生成工具

    cron表达式在指定定时任务时具有非常强的灵活性,可以满足日常遇到的各种定时规则.但是其规则设置起来还是有一定的难度,特别是不经常使用的时候,更容易忘记写法.通过图形化的方式进行配置,并且可以生成规则 ...

  4. Java Spring @Scheduled 定时任务crontab表达式设置

    Java Spring @Scheduled 定时任务crontab表达式设置 1. Cron详解 2. 例子 参考 1. Cron详解 Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或 ...

  5. R语言eval函数评估表达式或者字符串实战

    R语言eval函数评估表达式或者字符串实战 目录 R语言eval函数评估表达式或者字符串实战 #基本语法 #eval函数评估表达式

  6. crontab工具类 断给定的时间 是否 满足 crontab 表达式.md

    为什么80%的码农都做不了架构师?>>>    itone.crontab工具类.md /** * 断给定的时间 是否 满足 crontab 表达式[忽略毫秒] * 可以接受指定秒数 ...

  7. C语言基本运算符和表达式

    C语言基本运算符和表达式 运算符的种类.优先级和结合性 运算符的种类 1.算术运算符 2.关系运算符 3.逻辑运算符 4.位操作运算符 5.赋值运算符 6.条件运算符 7.逗号运算符 8.指针运算符 ...

  8. 【嵌入式】C语言高级编程-语句表达式(03)

    00. 目录 文章目录 00. 目录 01. C语言的表达式 02. C语言的语句 03. C语言中的代码块 04. C语言中的语句表达式 05. 宏中使用语句表达式 06. Linux内核应用示例 ...

  9. c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式

    C语言的运算符与表达式 运算符与表达式 C语言的运算符又称为操作符,是数据间进行运算的符号.C语言的运算符按运算类型可分为赋值运算符.算术运算符.逻辑运算符.关系运算符.位运算符.指针运算符和取成员运 ...

最新文章

  1. 关闭生成调试信息和嵌入清单
  2. GB2312,GBK,UTF-8的关系
  3. 深度学习之循环神经网络(9)LSTM层使用方法
  4. 快速学习一个新的模块
  5. 信息学奥赛C++语言:数字反转
  6. jQuery——入门基础(获取元素、样式、属性,选择集、过滤器、样式类)
  7. struts2下的Action配置的各项默认值
  8. 元宵节正月十五|设计师正需要的图片素材看这里
  9. JVM调优总结-调优方法
  10. 计算机软件项目实施工程师要掌握哪些知识
  11. 蓝奏批量替换自定义域名php源码
  12. 人人商城 邀请人 成功购买会员卡之后返现
  13. 存储历史(从古老的绳子记忆到如今)
  14. Pippo已经不能只用超级来形容了
  15. 【Android初级】什么是ANR?如何防止?如何修复?
  16. 原生js实现fadein 和 fadeout淡入淡出效果
  17. 笔记本接3.5寸硬盘mhdd检测
  18. JavaScript 中的 JSON
  19. 【记】Vue - 拖拽元素组件实现
  20. 【cocos creater】8.仿《弓箭传说》- 发射子弹

热门文章

  1. 数据结构与算法(系列文章一)
  2. ZLMediaKit Windows编译快速入门
  3. iWatch报错: Authorizationsession time out
  4. 微服务与SOA以及服务间通讯协议
  5. B. Difference of GCDs #808 div2
  6. 3D视觉检测:智能工业机器人从平面到立体的“视界”升级
  7. URL地址中的中文乱码问题的解决
  8. 计算机图学概念,计算机图形学(概念).doc
  9. win10家庭版打不开组策略的解决方法和彻底关闭病毒和威胁防护
  10. How to edit registry via CMD command