在前面的博客中,讲到了SylixOS下系统的时间的操作,但那个博客里面提供的例程实际用途不大。实际使用往往是从外部获取一个完整的标准时间,然后将此标准时间设置进系统时间。因此这里使用POSIX1003.1的相关函数重新编写了一个例程。例程比较简单,而且注释比较详细,详细大部分读者都能看懂。
在32bits的Linux系统中,其时间使用的是32bits变量表示,这样最大表示的时间不会超过2038年。这个问题在SylixOS中并不存在,因为SylixOS使用的是64bits表示时间。虽然2038年还很遥远,但有些嵌入式设备运行10年8年也是很正常的事情。
#include #include int main (int argc, char *argv[]) { int istatus; struct tm *tm_time; struct timespec settime; istatus = clock_gettime(CLOCK_REALTIME,&settime);/* 读取系统时间 */ if(istatus == -1) { printf("read time error"); } tm_time = localtime(&(settime.tv_sec)); /* 转换时间表示格式*/ printf("%d-%2d-%2d ",(1900+tm_time->tm_year), /* 显示日期 */ (1+tm_time->tm_mon),tm_time->tm_mday); printf("%d:%d:%d",tm_time->tm_hour, /* 输出当前系统时间 */ tm_time->tm_min,tm_time->tm_sec); printf(" %d\n", tm_time->tm_wday); /* 显示星期数 */ /* 使用 ctime 直接显示,与 localtime 函数的转换做对比 */ printf(ctime(&(settime.tv_sec))); printf("\n"); tm_time->tm_hour = tm_time->tm_hour + 1; /* 在当前时间上加1小时*/ settime.tv_sec = mktime(tm_time); settime.tv_nsec = 0; istatus = clock_settime(CLOCK_REALTIME,&settime);/* 设置系统时间 */ if(istatus == -1) { printf("set time error"); } istatus = clock_gettime(CLOCK_REALTIME,&settime);/* 读取系统时间 */ if(istatus == -1) { printf("read time error"); } printf(ctime(&(settime.tv_sec))); printf("\n"); system("hwclock --systohc"); /* 将时间同步到 RTC*/ return 0; } |
文章评论(0条评论)
登录后参与讨论