2011-10-31 15 views
1

のgcc(GCC)4.6.1取得ネットワークタイムプロトコル(NTP)タイムスタンプ

私はRTF 4566を使用して、いくつかのSDPを作成していると私は、私はセッションのためにそれを使用できるように、NTPタイムスタンプを取得したいですID。一意性を保証するために使用されるNetwork Time Protocol(NTP)形式のタイムスタンプを使用することをお勧めします。

しかし、ntp時間を返す関数はありますか?任意の提案のため

多くのおかげで、

+0

これを行うためにNTPクライアントライブラリを取得することができます。あなたはLinux上にいますか?あなたのディストリビューションに1つはありますか? – Rup

+0

NTPはかなり複雑ですので、プログラムが実行されているコンピュータをNTPサーバーと同期させ、ローカルのタイムスタンプを使用することをお勧めします。 –

+0

これは、NTPが1900年からの秒数にすぎないので、これは簡単かもしれないと思っていました.RTCが推奨したようにNTPを使いたい理由でした。私はRed Hatでコンパイルしています。私はユニークな価値が必要です。ありがとう。 – 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

は確かにそれを行うには良い方法がありますが、この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; 
    } 
関連する問題