Получение метки времени сетевого протокола (NTP) - PullRequest
1 голос
/ 31 октября 2011

gcc (GCC) 4.6.1

Я создаю некоторый sdp с использованием RTF 4566, и я хочу получить метку времени NTP, чтобы я мог использовать ее для идентификатора сеанса.Для обеспечения уникальности рекомендуется использовать временную метку формата протокола сетевого времени (NTP).

Однако, есть ли функция, которая будет возвращать время ntp?

Большое спасибо за любые предложения

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

Если кому-то интересно, вот как я решил свою проблему.

/* Get the time in micro seconds to create an unique session id */
time_usec = apr_time_usec(apr_time_now());
apr_snprintf(session_id, MAX_STRING_LEN, "%lu", (unsigned long)time_usec);

Надеюсь, это кому-нибудь поможет,

2 голосов
/ 01 ноября 2011

Отметка времени NTP состоит из 32-битного значения, представляющего секунды с 1.1.1900, и 32-битного значения, добавляющего к нему дробную часть значения * 1 / (2 ^ 32) секунд.1 / (2 ^ 32) секунды меньше наносекунды (233 пикосекунды, если быть точным).

Получение значения такой точности может быть достигнуто с помощью clock_gettime().В любом случае следует использовать clock_getres(), чтобы проверить, достаточно ли высокое разрешение часов, чтобы обслуживать действительные значения.

1 голос
/ 26 апреля 2012

, конечно, есть лучший способ сделать это, но этот должен работать.

#include <stdio.h>
#include <sys/time.h> //gettimeofday()
    int main()
    {
    struct timeval NTP_value;

    gettimeofday(&NTP_value, NULL);

    printf("\nsince January 1, 1970: %ld.%ld s\n", (long int)NTP_value.tv_sec,(long int)NTP_value.tv_usec);
    // that value is since 1970. So you just have to add 70years and 17 days 
    printf("\nsince January 1, 1900: %.6f s\n", (float)NTP_value.tv_sec+ (float)2208988800 + (float)NTP_value.tv_usec/1000000);
    return 0;
    }
...