我在 Linux 上有一个应用程序,它需要每小时更改一些参数,例如在 11:00、12:00 等,并且用户可以随时更改系统的日期。
当一小时从 xx:59 变为 xx+1:00 时,是否有任何信号、posix 函数可以提供给我?
通常,我使用localtime(3)
每秒获取当前时间,然后比较分钟部分是否等于0
. 但是,它看起来不是一个好方法,为了检测变化,我需要每秒调用相同的函数一个小时。特别是我在嵌入式板上运行代码,这样可以减少资源的使用。
这是一个示例代码,我是如何做到的:
static char *fetch_time() { // I use this fcn for some other purpose to fetch the time info
char *p;
time_t rawtime;
struct tm * timeinfo;
char buffer[13];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime (buffer,13,"%04Y%02m%02d%02k%02M",timeinfo);
p = (char *)malloc(sizeof(buffer));
strcpy(p, buffer);
return p;
}
static int hour_change_check(){
char *p;
p = fetch_time();
char current_minute[3] = {'\0'};
current_minute[0] = p[10];
current_minute[1] = p[11];
int current_minute_as_int = atoi(current_minute);
if (current_minute_as_int == 0){
printf("current_min: %d\n",current_minute_as_int);
free(p);
return 1;
}
free(p);
return 0;
}
int main(void){
while(1){
int x = hour_change_check();
printf("x:%d\n",x);
sleep(1);
}
return 0;
}