2011-10-31 50 views
1

海合会(GCC)4.6.1获得一个网络时间协议(NTP)时间戳

我使用RTF 4566创造一些SDP和我想要得到的NTP时间戳,这样我可以使用它的会话ID。建议使用网络时间协议(NTP)格式时间戳来确保唯一性。

但是,是否有任何函数会返回ntp时间?

非常感谢任何建议,

+0

我怀疑你可以抓住一个NTP客户端库来做到这一点。你在Linux上?你的发行版有一个吗? – Rup

+0

由于NTP非常复杂,我建议您将运行程序的计算机同步到NTP服务器,并使用本地时间戳。 –

+0

我认为这可能很简单,因为NTP只有1900年的秒数。我想使用NTP的原因是RTC推荐的。我正在编译红帽。我只需要有一个独特的价值。谢谢。 – ant2009

回答

3

如果有人有兴趣,这是我如何解决我的问题。

/* 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); 

希望这可以帮助别人,

+0

总是很好地提及解决您的问题。 –

2

的NTP时间戳由代表自1900年1月1日的秒数和一个32位的范围内的值添加的值的小数部分32位宽值* 1 /(2^32)几秒钟。 1 /(2^32)的秒数小于纳秒(准确的说是233微秒)。

使用clock_gettime()可以获得这样的精度值。无论如何,应该使用clock_getres()来测试时钟分辨率是否足够高以提供有效值。

1

肯定有一个更好的办法来做到这一点,但是这一个应该的作品。

#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; 
    }