Linux предоставляет вызов stime (2) для установки системного времени. Однако, хотя при этом обновляется системное время, аппаратные часы BIOS не устанавливаются в соответствии с новым системным временем.
Системы Linux обычно синхронизируют аппаратные часы с системным временем при завершении работы и через определенные промежутки времени. Однако, если машина будет выключена и снова выключена до одной из этих автоматических синхронизаций, время будет неправильным при перезапуске машины.
Как обеспечить обновление аппаратных часов при установке системного времени?
Почему язык программирования имеет значение? У вас разные ответы на разные языки /
Э ................. да.





После вызова stime () сделайте следующее:
system("/sbin/hwclock --systohc");
См. Справочную страницу hwclock (8) для получения дополнительной информации.
Обратите внимание, что если ваш rtc настроен на использование времени UTC, в противном случае вам нужно добавить --utc или --localtime.
Я также хотел бы отметить, что аппаратные часы точны только до определенной точки (я видел системы, которые теряют / набирают пару секунд в день).
Думали ли вы о настройке демона сетевого времени для синхронизации ваших часов с сервером времени?
По общему признанию, эта синхронизация не происходит до тех пор, пока демон не запустится, поэтому синхронизация ваших аппаратных часов также помогает между включением питания и моментом, когда демон времени синхронизируется с сервером времени.
По моему опыту, большинство этих вариаций связано с низким напряжением батареи материнской платы. Я бы посоветовал проверить это перед настройкой ненужной службы, если это не критично.
Я бы начал с чтения исходного кода hwclock.
Возможно, вы пишете для встроенной системы, и у вас нет места для другой программы. Или, может быть, вы просто хотите узнать это из любопытства.
Это был ответ на исходный вопрос. Не знаю, зачем это нужно.
@iny, я имел в виду "Зачем читать исходник в hwclock, если можно просто вызвать hwclock?" У Зана был хороший ответ на это.
Запуск "strace hwclock", вероятно, самый быстрый способ удовлетворить свое любопытство.
За подробностями обращайтесь к странице руководства 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);
Корень не требуется, только возможность CAP_SYS_TIME согласно rtc (4).
Если текстовый редактор отличается от kubuntu (по умолчанию в редакторе используется kate), используйте свой собственный с командой sudo в терминале.
sudo kate /etc/default/rcS пресс EnterUTC=yes на UTC=noКажется, не имеет отношения к заданному вопросу.
Укажите язык программирования.