海合会 (GCC) 4.6.1
我正在使用 RTF 4566 创建一些 sdp,并且我想获取 NTP 时间戳,以便可以将其用于会话 ID。建议使用网络时间协议 (NTP) 格式的时间戳来确保唯一性。
但是,是否有任何函数可以返回 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 位宽的值加上 value*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 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;
}