Wednesday, 15 June 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);

Write on: 0:13 | 0 comments | | tags: , , , , , | permalink |
Add post to:   Delicious Reddit Slashdot Digg Technorati Google


Add comment

Comments

No comments for this post

Comment form for «временной интервал в linux»

Required. 30 chars of fewer.

Required.