Среда, 15 Июнь 2011
временной интервал в linux
Задали вопрос: как понять, сколько прошло времени в linux?
Первый ответ, который приходит на ум это взять:
gettimeofday(&time1, NULL)
sleep(5);
gettimeofday(&time2, NULL)
и вычесть time1 из time2. Плох этот вариант тем, что время будет не предсказуемое ибо оно может смениться в следствии ntpdate, которая резко переводит время. Есть еще ntpd, который просто корректирует длину секунды.
Второй вариант это:
clock_gettime(CLOCK_MONOTONIC, &time1);
sleep(5);
clock_gettime(CLOCK_MONOTONIC, &time2);
лучше. ntpdate уже не страшен, время привязано к uptime, но от ntpd не спасет. Опять же, на точность влияет kernel.vsyscall64.
И самый верный вариант (но доступный с ядер 2.6.28) это:
clock_gettime(CLOCK_MONOTONIC_RAW, &time1);
sleep(5);
clock_gettime(CLOCK_MONOTONIC_RAW, &time2);
Комментарии
Форма комментирования для «временной интервал в linux»