Linux C時間関数clock_gettime()の使用

4805 ワード

関数:int clock_gettime(clockid_t clk_id, struct timespec *tp);
clockid_t:クロックのタイプを指定します.CLOCK_REALTIME:システムのリアルタイム時間、Epochから時間を計って、設定を変更することができる.CLOCK_MONOTONIC:システム稼働時間、システム起動時から計時、システムのスリープ時にカウントダウンしない(NTPとハードウェアクロックに問題がある場合はその周波数に影響しますが、検証されていません).CLOCK_PROCESS_CPUTIME_ID:本プロセスが起動してから今までCPUを使用していた時間、sleepなどの関数を使用していた場合は計時しません.CLOCK_THREAD_CPUTIME_ID:本スレッドが起動してから今までCPUを使用していた時間、sleepなどの関数を使用していた場合は計時しません.CLOCK_MONOTONIC_RAW:システム実行時間、システム起動時から計時を開始し、システムのスリープ時にカウントダウンしない(NTPとハードウェアクロックに問題がある場合はその周波数に影響しない、検証されていない).CLOCK_REALTIME_COARSE:システムのリアルタイム時間、Epochから計時して、設定変更されて、速度がもっと速くて精度がもっと低い.CLOCK_MONOTONIC_COARSE:システムの運行時間、システムの起動時から計時を開始して、速度がもっと速くて精度がもっと低くて、システムが休眠している時計時しない(NTPとハードウェアクロックに問題がある場合はその周波数に影響し、検証されていない).CLOCK_BOOTIME:CLOCK_MONOTONICと類似CLOCK_REALLTIME_ALARM:アラーム時間(スリープ後に計時を継続すべき、検証されていない)、システムリアルタイム時間、Epochから計時し、設定を変更することができる.CLOCK_BOOTIME_ALARM:アラーム時間(スリープしてから計時を続けるべきで、検証したことがない)、システムの運行時間、システムの起動時から計時を開始する.CLOCK_TAI:原子時計の時間、CLOCK_REALTIMEと類似して、変更されてはいけない、閏秒がない.
struct timespec:struct timespec{time_t tv_sec;//秒long tv_nsec;//ナノ秒};
例:
#include 
#include 
#include 
#include 
#include 
#include 

static void clock_gettime_test()
{
	struct timespec ts;

	clock_gettime(CLOCK_REALTIME, &ts);
    printf("CLOCK_REALTIME(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_REALTIME, &ts); printf("CLOCK_REALTIME(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_MONOTONIC, &ts); printf("CLOCK_MONOTONIC(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_MONOTONIC, &ts); printf("CLOCK_MONOTONIC(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); printf("CLOCK_PROCESS_CPUTIME_ID(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); printf("CLOCK_PROCESS_CPUTIME_ID(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); printf("CLOCK_THREAD_CPUTIME_ID(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); printf("CLOCK_THREAD_CPUTIME_ID(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_MONOTONIC_RAW, &ts); printf("CLOCK_MONOTONIC_RAW(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_MONOTONIC_RAW, &ts); printf("CLOCK_MONOTONIC_RAW(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_REALTIME_COARSE, &ts); printf("CLOCK_REALTIME_COARSE(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_REALTIME_COARSE, &ts); printf("CLOCK_REALTIME_COARSE(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_MONOTONIC_COARSE, &ts); printf("CLOCK_MONOTONIC_COARSE(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_MONOTONIC_COARSE, &ts); printf("CLOCK_MONOTONIC_COARSE(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_BOOTTIME, &ts); printf("CLOCK_BOOTTIME(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_BOOTTIME, &ts); printf("CLOCK_BOOTTIME(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_REALTIME_ALARM, &ts); printf("CLOCK_REALTIME_ALARM(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_REALTIME_ALARM, &ts); printf("CLOCK_REALTIME_ALARM(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_BOOTTIME_ALARM, &ts); printf("CLOCK_BOOTTIME_ALARM(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_BOOTTIME_ALARM, &ts); printf("CLOCK_BOOTTIME_ALARM(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_TAI, &ts); printf("CLOCK_TAI(1) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); usleep(1000 * 1000); clock_gettime(CLOCK_TAI, &ts); printf("CLOCK_TAI(2) sec = %lu, nsec = %ld
", ts.tv_sec, ts.tv_nsec); } int main() { clock_gettime_test(); return 0; }