Смещение на несколько часов при установке времени (settimeofday)

Модератор: Модераторы разделов

xfree86
Сообщения: 97

Смещение на несколько часов при установке времени

Сообщение xfree86 »

Добрый день... Вот возникла проблема

Код: Выделить всё

int main(int argc, char *argv[])
{
  struct timeval tv;
  struct timezone tz;

  gettimeofday(&tv,&tz);
  settimeofday(&tv,&tz);

  return 0;
 }


Вот такой простой код... Все ясно и понятно... Получили время и часовой пояс и сразу же его установили
Но!!!!!!!! Время сбивается вперед на 3 часа... У меня настроенно UTC , Europe/Moscow...
Смещение действительно 3 часа... Но в переменной tz.tz_minuteswest четко написано -180
Я получил это значение и его же отправил
Значит он должен был все это учесть видимо...

Можно конечно так

Код: Выделить всё

int main(int argc, char *argv[])
{
  struct timeval tv;
  struct timezone tz;

  gettimeofday(&tv,&tz);
  tv.tv_sec+=tz.tz_minuteswest*60;
  settimeofday(&tv,&tz);

  return 0;
}


Но разве это правильно??????????????????????????????7
Спасибо сказали:
Аватара пользователя
JackYF
Сообщения: 129
ОС: Debian GNU/Linux

Re: Смещение на несколько часов при установке времени

Сообщение JackYF »

Я полагаю, происходит вот это (выдержка из мана)
Under Linux there is some peculiar ‘warp clock’ semantics associated to the settimeofday() system call if on the very
first call (after booting) that has a non-NULL tz argument, the tv argument is NULL and the tz_minuteswest field is
non-zero. In such a case it is assumed that the CMOS clock is on local time, and that it has to be incremented by this
amount to get UTC system time. No doubt it is a bad idea to use this feature.

Это как-то не очень, да. Но тут я нескромно поинтересуюсь... а ты пишешь софт, изменяющий время? он будет пускаться от рута?
"В природе не существует инструмента, машины или устройства, по силе и виртуозности сравнимого с человеческой рукой."
В. Г. Бэнхэм.
---
Ваяю "нелинейный" клавиатурный тренажёр для GNU/Linux - nlkt.
Спасибо сказали:
xfree86
Сообщения: 97

Re: Смещение на несколько часов при установке времени

Сообщение xfree86 »

JackYF писал(а):
12.02.2008 19:41
Я полагаю, происходит вот это (выдержка из мана)
Under Linux there is some peculiar ‘warp clock’ semantics associated to the settimeofday() system call if on the very
first call (after booting) that has a non-NULL tz argument, the tv argument is NULL and the tz_minuteswest field is
non-zero. In such a case it is assumed that the CMOS clock is on local time, and that it has to be incremented by this
amount to get UTC system time. No doubt it is a bad idea to use this feature.

Это как-то не очень, да. Но тут я нескромно поинтересуюсь... а ты пишешь софт, изменяющий время? он будет пускаться от рута?


Да... Именно
И именно под рутом
При присоединению к приложению сервера он присылает свое время для синхронизации... Его нужно будет установить
Спасибо сказали:
Аватара пользователя
JackYF
Сообщения: 129
ОС: Debian GNU/Linux

Re: Смещение на несколько часов при установке времени

Сообщение JackYF »

xfree86 писал(а):
12.02.2008 22:10
он присылает свое время для синхронизации


а ntp никак заюзать? Ежели ответ - нет... То тогда да, делать воркэраунд.
"В природе не существует инструмента, машины или устройства, по силе и виртуозности сравнимого с человеческой рукой."
В. Г. Бэнхэм.
---
Ваяю "нелинейный" клавиатурный тренажёр для GNU/Linux - nlkt.
Спасибо сказали: