gcc (gcc) 4.6.1
我正在使用RTF 4566创建一些sdp,我想获得NTP时间戳,以便我可以将其用于会话ID。建议使用NTP (Network Time Protocol)格式,使用时间戳保证唯一性。
然而,是否有任何函数将返回ntp时间?
非常感谢您的建议,
如果有人感兴趣,这是我如何解决我的问题。
/* 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);
希望对大家有所帮助,
NTP时间戳包括一个32位宽的值,表示自1.1.1900以来的秒数,以及一个32位宽的值加上值*1/(2^32)秒的小数部分。1/(2^32)秒小于1纳秒(准确地说是233皮秒)。
使用clock_gettime()
可以获得这样的精度值。无论如何,应该使用clock_getres()
来测试时钟的分辨率是否足够高,以提供有效值。
肯定有更好的方法,但是这个应该可以。
#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 sn", (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 sn", (float)NTP_value.tv_sec+ (float)2208988800 + (float)NTP_value.tv_usec/1000000);
return 0;
}