Как перенести gethrtime() в C из Solaris в RHEL
Я портирую проект C с Solaris на Linux и перекомпилирую его. В файле logger.c функция gethrtime() sys/time.h не компилируется для Linux. Как я могу перенести его на Linux? Есть ли заменитель этого в Linux?
3 ответа
Функция, которую вы ищете clock_gettime
:
struct timespec t;
if (clock_gettime(CLOCK_MONOTONIC, &t) == -1) {
perror("clock_gettime for CLOCK_MONOTONIC failed");
} else {
printf("mono clock timestamp: %ld.%09ld\n", t.tv_sec, t.tv_nsec);
}
CLOCK_MONOTONIC
Аргумент получает время из неопределенной начальной точки. Это отличается от CLOCK_REALTIME
который получает время настенных часов.
В большинстве реализаций разрешение будет в наносекундах, однако точное разрешение можно узнать, вызвав clock_getres
:
struct timespec t;
if (clock_getres(CLOCK_MONOTONIC, &t) == -1) {
perror("clock_getres for CLOCK_MONOTONIC failed");
} else {
printf("mono clock resolution: %ld.%09ld\n", t.tv_sec, t.tv_nsec);
}
Это то, что у меня есть около 10 лет:
Заголовочный файл:
#ifdef __linux
typedef uint64_t hrtime_t;
hrtime_t gethrtime( void );
#endif
Исходный код:
#ifdef __linux
hrtime_t gethrtime( void )
{
struct timespec ts;
hrtime_t result;
#ifdef CLOCK_MONOTONIC_HR
clock_gettime( CLOCK_MONOTONIC_HR, &ts );
#else
clock_gettime( CLOCK_MONOTONIC, &ts );
#endif
result = 1000000000LL * ( hrtime_t ) ts.tv_sec;
result += ts.tv_nsec;
return( result );
}
#endif
Вероятно, должна быть проверка ошибок, но так как gethrtime()
У меня нет способа вернуть ошибку, я не видел причин добавлять ее сюда.
Время чтения (7). Вы, вероятно, хотите использовать clock_gettime (2).