Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: системный вызов adjtime  (Прочитано 1217 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
системный вызов adjtime
« : 30 Сентября 2011, 11:46:47 »
Всем добрый день.
Мужики, прошу вашего совета, точнее хотелось перенять опыта у того, кто с этой штукой сталкивался.

Меня интересуют функции adjtime и adjtimex.
Точнее период за которые они делаю плавную коррекцию.

Был проведен небольшой эксперимент.
В браузере открыл сайт с точным временем, и сделал свои системные часы на 7 секунд опаздывающими.

Написал прогу так, что она корректирует вреся с помощью функции adjtime и каждую секунду выводит значение системного времени. (значения структуры timeval были: tv_sec = 7; tv_usec = 0;)Так вот в течении минут 10 отставание часов сократилось на 5 секунд.

Потом сдела часы спешащими секунд на 8 и так же запустил программу, но тут уже не обошлось 10 минутами... даже после прошествия часа я не заметил никакой корректировки. (значения структуры timeval были: tv_sec = -8; tv_usec = 0;)

И так внимание вопрос, уважаемые знатаки.
От чего же зависит период корректировки времени и какой алгоритм сидит внутри этой функции?

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: системный вызов adjtime
« Ответ #1 : 11 Октября 2011, 09:55:32 »
Вот со всем этим, что я писал выше я уже разобрался.

Сейчас интересует другой вопрос.

Если кто нибудь пользовался функцией adjtime (версия Linux 2.6.1 b версия библиотеки gcc ниже 2.8), подскажите удавалось ли вам корректно извлечь остаток корректировки времени задавая параметры примерно так: adjtime(NULL, my_timeval_struct) ?

Ибо у меня не получилось, точнее получилось но всего один раз.
Если после назначения корректировки после прошествия какого то времени исполнить след код
struct timeval old_delta;
struct timeval new_delta;

memset((char *)&old_delta, 0, sizeof(old_delta)); // значения полей структуры будут равны 0
memset((char *)&old_delta, 0, sizeof(old_delta)); //

adjtime(&new_delta, &new_delta);

то остаток корректировки будет получен. Но если после прошествия еще какого то времени исполнить

memset((char *)&old_delta, 0, sizeof(old_delta)); // значения полей структуры будут равны 0
memset((char *)&old_delta, 0, sizeof(old_delta)); //

adjtime(&new_delta, &new_delta);


то уже мы вынем остаток корректировки равный 0сек 0 мксек

Как с этим бороться???

 

Страница сгенерирована за 0.014 секунд. Запросов: 22.