ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
1003908 Топик полностью
fk0, легенда (11.05.2020 23:05, просмотров: 443) ответил Cкpипaч на А зачем там батарейка? На малинке батарейки нет и никто не хнычет.
Чтоб не стартовать каждый раз в 2014 году. И не огребать из-за этого каких-то неожиданных ньюансов. Потому, что некторым и mtime, и atime оказывается важен. У некоторых не расчитано на возможный перевод времени и случаются глюки в момент скачка вперёд (а плавно на 6 лет линукс подвести не может), потому, что резко кончаются все таймауты. В этом смысле POSIX API очень неразумно сделано, потому как во многих местах подразумевается абсолютное CLOCK_REALTIME, вместо 

CLOCK_MONOTONIC (или ядро может, а в библиотеках поддержка появится к 2025 году). Перевод времени назад же -- вообще гарантированный глюкодром, опять же из-за абсолютного времени. Если при переводе вперёд в неудачный момент (там всё намного комичнее, потому, что само ядро оперирует относительным временем, POSIX API абсолютным, и в библиотеке одно переводится в другое) можно раньше времени вывалиться из таймаута, то при переводе времени назад можно наоборот, никогда не проснуться. На любом condvar'е, на мелком сраном мьютексе с таймаутом. Всё достаточно печально. Но ты опять же скажешь, мол это надо 1000 раз питание передёрнуть, чтоб на баг нарваться. Поэтому для твоих задач похеру. Только вот когда до больших чисел доходит, такие баги имеют тенденцию неожиданно всплывать в очень оптовых количествах. 5 лет было ничего, а потом каждый второй навернулся. Впрочем есть туповатое решение -- регулярно писать время в файл и из него читать на старте. Да время оказывается в прошлом, да будет скачёк при первой синхронизации, но по крайней мере время монотонно двигается вперёд (сдвигов назад нет).

[ZX]