海合會(GCC)4.6.1獲得一個網絡時間協議(NTP)時間戳
我使用RTF 4566創造一些SDP和我想要得到的NTP時間戳,這樣我可以使用它的會話ID。建議使用網絡時間協議(NTP)格式時間戳來確保唯一性。
但是,是否有任何函數會返回ntp時間?
非常感謝任何建議,
海合會(GCC)4.6.1獲得一個網絡時間協議(NTP)時間戳
我使用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時間戳由代表自1900年1月1日的秒數和一個32位的範圍內的值添加的值的小數部分32位寬值* 1 /(2^32)幾秒鐘。 1 /(2^32)的秒數小於納秒(準確的說是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;
}
我懷疑你可以抓住一個NTP客戶端庫來做到這一點。你在Linux上?你的發行版有一個嗎? – Rup
由於NTP非常複雜,我建議您將運行程序的計算機同步到NTP服務器,並使用本地時間戳。 –
我認爲這可能很簡單,因爲NTP只有1900年的秒數。我想使用NTP的原因是RTC推薦的。我正在編譯紅帽。我只需要有一個獨特的價值。謝謝。 – ant2009