如何在Linux上以编程方式设置硬件时钟?

时间:2008-10-14 17:43:06

标签: c linux time clock hwclock

Linux提供了stime(2)调用来设置系统时间。但是,虽然这会更新系统的时间,但它不会将BIOS硬件时钟设置为与新系统时间匹配。

Linux系统通常会在关机时定期将硬件时钟与系统时间同步。但是,如果机器在其中一个自动同步之前重新启动电源,则机器重新启动时的时间将不正确。

如何确保在设置系统时间时更新硬件时钟?

5 个答案:

答案 0 :(得分:14)

查看rtc man-page了解详细信息,但如果您以root用户身份登录,请执行以下操作:

    struct       rtc_time {
        int         tm_sec;      
        int         tm_min;      
        int         tm_hour;     
        int         tm_mday;     
        int         tm_mon;      
        int         tm_year;     
        int         tm_wday; /* unused */
        int         tm_yday; /* unused */
        int         tm_isdst;/* unused */
    };

struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);

答案 1 :(得分:9)

在调用stime()之后,执行以下操作:

system("/sbin/hwclock --systohc");

有关更多信息,请参见hwclock(8)手册页。

答案 2 :(得分:2)

我还想指出硬件时钟只是精确到一定程度(我已经看到系统每天会松散/获得几秒钟)。

您是否考虑过设置网络时间守护程序以将时钟与时间服务器同步?

不可否认,这种同步直到守护进程启动后才会发生,因此保持硬件时钟同步也有助于加电和时间守护程序与时间服务器同步的点。

答案 3 :(得分:2)

我首先阅读hwclock的源代码。

答案 4 :(得分:0)

如果文本编辑器与kubuntu不同(kate是编辑器中的默认编辑器),请在终端中使用您自己的sudo命令。

  1. run terminal
  2. 复制并粘贴此命令 sudo kate /etc/default/rcS Enter
  3. 输入用户密码(您的登录密码)按 Enter
  4. 文本编辑器将在桌面上打开
  5. 将行UTC=yes更改为UTC=no
  6. 并单击“保存”(位于文本编辑器选项卡栏顶部)
  7. 重新启动