Мне приходит на ум множество потенциальных возможностей:
Конечно, это худший сценарий, так что не паникуйте. Некоторые из них могут быть заблокированы другими мерами безопасности и вовсе не будут тривиальными.
Мое решение состояло в том, чтобы писать напрямую в rtc, используя ioctrl. Вот реализация для тех, кто сталкивался с этим:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
{
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
}
Вы можете использовать hwclock
, который должен быть встроенным в каждый встроенный дистрибутив Linux.
$hwclock
— это -, поскольку имя команды предполагает -аппаратные часы , не зависящие от используемой ОС. В наши дни он использует маломощный -генератор, встроенный в материнскую плату, который отслеживает течение времени, даже когда машина выключена (использует батарею mb, которая будет работать долго)
Если hwclock
недоступен, есть другие альтернативы, которые я с удовольствием пройдусь, но hwclock
должна быть вашей командой goto, если она доступна.