gcc(GCC)4.6.1
RTF 4566を使用してsdpを作成していますが、セッションIDに使用できるようにNTPタイムスタンプを取得したいと思います。一意性を確保するために、ネットワークタイムプロトコル(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タイムスタンプは、1.1.1900からの秒数を表す32ビット幅の値と、値* 1 /(2 ^ 32)秒の小数部分を追加した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;
}