Ответ 1
Рассматривая этот документ, я думаю, что умножение tv_usec
на 1000 достаточно, чтобы получить tv_nsec
.
Более того, я подозреваю, что это источник различных структур: они могут быть заполнены разными часами.
struct timeval
представляет и мгновенное время с двумя членами, tv_sec
(секунды) и tv_usec
(микросекунды). В этом представлении tv_usec
само по себе не является абсолютным временем, это субсекундное смещение от tv_sec
.
struct timespec
работает так же, за исключением того, что вместо микросекунд, которые он смещает (tv_nsec
), сохраняется в наносекундных единицах.
Вопрос: существует ли стандартный способ преобразования между этими двумя?
Рассматривая этот документ, я думаю, что умножение tv_usec
на 1000 достаточно, чтобы получить tv_nsec
.
Более того, я подозреваю, что это источник различных структур: они могут быть заполнены разными часами.
В sys/time.h
есть два макроса, которые делают то, что вы хотите:
TIMEVAL_TO_TIMESPEC(X, Y)
и
TIMESPEC_TO_TIMEVAL(X, Y)
Смотрите документы здесь: http://www.daemon-systems.org/man/TIMEVAL_TO_TIMESPEC.3.html