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

Kri*_*son 11 c linux time clock hwclock

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

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

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

Zan*_*ynx 14

查看rtc手册页了解详细信息,但如果您以root身份登录,则执行以下操作:

#include <linux/rtc.h>
#include <sys/ioctl.h>


    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 */
    };

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


Kri*_*son 9

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

system("/sbin/hwclock --systohc");
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,如果您的rtc设置为使用UTC时间,则需要添加`--utc`或`--localtime`. (2认同)