cron格式解析器
头文件
#include "mln_cron.h"
模块名
cron
函数
mln_cron_parse
time_t mln_cron_parse(mln_string_t *exp, time_t base);
描述:根据给定的cron表达式exp和基准时间戳base,计算出下一次可用的时间戳。
支持的cron语法:
*通配符,匹配所有值N具体数值N,N,N逗号分隔的值列表N-N范围(支持环绕,如小时字段22-3表示22,23,0,1,2,3)*/N步进N-N/N范围与步进的组合- 月份名称:
JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC(不区分大小写) - 星期名称:
SUN,MON,TUE,WED,THU,FRI,SAT(不区分大小写) - 预定义宏:
@yearly(或@annually),@monthly,@weekly,@daily(或@midnight),@hourly
返回值:time_t类型时间戳,若出错则返回0。
示例
#include "mln_cron.h"
#include <stdio.h>
int main(void)
{
/* 基本通配符 */
char p[] = "* * * * *";
mln_string_t s;
mln_string_nset(&s, p, sizeof(p)-1);
time_t now = time(NULL);
time_t next = mln_cron_parse(&s, now);
printf("%lu %lu %s\n", (unsigned long)now, (unsigned long)next, ctime(&next));
/* 使用月份和星期名称 */
char p2[] = "0 9 * JAN-JUN MON-FRI";
mln_string_nset(&s, p2, sizeof(p2)-1);
next = mln_cron_parse(&s, now);
printf("next: %lu %s\n", (unsigned long)next, ctime(&next));
/* 使用预定义宏 */
char p3[] = "@daily";
mln_string_nset(&s, p3, sizeof(p3)-1);
next = mln_cron_parse(&s, now);
printf("daily: %lu %s\n", (unsigned long)next, ctime(&next));
return 0;
}