tag 标签: clock_gettime

相关博文
  • 热度 18
    2015-7-18 16:56
    1118 次阅读|
    0 个评论
      在前面的博客中,讲到了 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; }