Установка даты и времени системы с использованием С++ в Linux

Вопрос:Я занимаюсь разработкой кросс-платформенного приложения, которое меняет системную дату и время на указанное значение. Я выполнил часть для Windows. Как установить системную дату и время из программы C++ в Linux? Я ищу функцию, похожую на SetSystemTime(SYSTEMTIME &x). Насколько я понял settimeofday() ничего не делает с датой, и я не уверен в использовании функции stime(). Надеюсь,

Вопрос:

Я занимаюсь разработкой кросс-платформенного приложения, которое меняет системную дату и время на указанное значение. Я выполнил часть для Windows.

Как установить системную дату и время из программы C++ в Linux? Я ищу функцию, похожую на SetSystemTime(SYSTEMTIME &x).

Насколько я понял settimeofday() ничего не делает с датой, и я не уверен в использовании функции stime(). Надеюсь, что mktime() не имеет ничего общего с моей потребностью.

Кто-нибудь может мне помочь.

Лучший ответ:

Вы неправильно поняли. settimeofday (2) устанавливает время эпохи. это и дата и время. Время чтения (7)

Таким образом, если вы начинаете со строки, выражающей дату, преобразуйте эту строку с помощью strptime (3) в struct tm затем преобразуйте ее во время Unix с помощью mktime (3), а затем settimeofday в settimeofday (т. tv_sec Поле tv_sec).

Однако для settimeofday требуются права суперпользователя, и я считаю, что обычно вам следует избегать их вызова (по крайней мере, на обычных компьютерах, подключенных к Интернету). Лучше установите на клиентском ПК какой-нибудь клиентский сервис NTP (например, запустите ntpd или chrony и, в более общем случае, прочитайте главу sysadmin о времени работы…) Смотрите также adjtimex (2)

Кстати, резкое изменение системного времени в многозадачной системе -like Linux или Windows- – очень опасная операция (так как она может расстроить и нарушить многие системные задачи в зависимости или использования времени). Есть несколько веских причин для этого (это очень плохая идея в целом). Если вы сделаете это, сделайте это с очень небольшим количеством запущенных программ и служб (например, однопользовательский режим Linux). Вы не должны делать это в обычном коде приложения.

Ответ №1

Я пишу этот кусок кода, чтобы установить Date и Time под Linux.

struct tm time = { 0 }; time.tm_year = Year — 1900; time.tm_mon = Month — 1; time.tm_mday = Day; time.tm_hour = Hour; time.tm_min = Minute; time.tm_sec = Second; if (time.tm_year < 0) time.tm_year = 0; time_t t = mktime(&time); if (t != (time_t) -1) stime(&t);

Обратите внимание, что для stime требуется root привилегия. Надеюсь, это поможет.

Boshen

Ответ №2

@guan Boshen, можете ли вы сказать мне, как запустить “кусок кода для установки даты и времени в Linux”. что вы разместили с правами суперпользователя? используя QT C++

Оцените статью
Добавить комментарий