(システム管理者がシステム時間を変更した場合、またはタイムゾーンの冬時間と夏時間が異なる場合、ここでの回答はすべて欠けています。したがって...)
Linuxでの使用:clock_gettime(CLOCK_MONOTONIC_RAW, &time_variable);
system-adminが時刻を変更した場合、または冬時間と夏時間とが異なる国に住んでいる場合などは影響を受けません。
#include <stdio.h>
#include <time.h>
#include <unistd.h> /* for sleep() */
int main() {
struct timespec begin, end;
clock_gettime(CLOCK_MONOTONIC_RAW, &begin);
sleep(1); // waste some time
clock_gettime(CLOCK_MONOTONIC_RAW, &end);
printf ("Total time = %f seconds\n",
(end.tv_nsec - begin.tv_nsec) / 1000000000.0 +
(end.tv_sec - begin.tv_sec));
}
man clock_gettime
状態:
CLOCK_MONOTONIC
Clock that cannot be set and represents monotonic time since some unspecified starting point. This clock is not affected by discontinuous jumps in the system time
(e.g., if the system administrator manually changes the clock), but is affected by the incremental adjustments performed by adjtime(3) and NTP.