Книга: Linux программирование в примерах
14.3.1. Время в микросекундах: gettimeofday()
14.3.1. Время в микросекундах: gettimeofday()
Первой задачей является получение времени дня:
#include <sys/time.h>
позволяет получить время дня.[156] В случае успеха возвращается 0, при ошибке -1. Аргументы следующие:
int gettimeofday(struct timeval *tv, void *tz); /* определение POSIX, а не GLIBC */
gettimeofday()
struct timeval *tv
Этот аргумент является указателем на struct timeval
, которая вскоре будет описана и в которую система помещает текущее время.
void *tz
Это аргумент больше не используется; он имеет тип void*
, поэтому он всегда должен равняться NULL
. (Справочная страница описывает, для чего он использовался, а затем утверждает, что он устарел. Прочтите, если интересуетесь подробностями.)
Время представлено структурой struct timeval
:
struct timeval {
long tv_sec; /* секунды */
long tv_usec; /* микросекунды */
};
Значение tv_sec
представляет секунды с начала Эпохи; tv_usec
является числом микросекунд в секунде.
Справочная страница GNU/Linux gettimeofday(2) документирует также следующие макросы:
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
#define timercmp(tvp, uvp, cmp)
((tvp)->tv_sec cmp (uvp)->tv_sec ||
(tvp)->tv_sec == (uvp)->tv_sec &&
(tvp)->tv_usec cmp (uvp)->tv_usec)
#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
Эти макросы работают со значениями struct timeval*
; то есть указателями на структуры, и их использование должно быть очевидным из их названий и кода. Особенно интересен макрос timercmp()
: третьим аргументом является оператор сравнения для указания вида сравнения. Например, рассмотрим определение того, является ли одна struct timeval
меньше другой:
struct timeval t1, t2;
...
if (timercmp(&t1, & t2, <))
/* t1 меньше, чем t2 */
Макрос развертывается в
((&t1)->tv_sec < (&t2)->tv_sec ||
(&t1)->tv_sec == (&t2)->tv_sec &&
(&t1)->tv_usec < (&t2)->tv_usec)
Это значит: «если t1.tv_sec
меньше, чем t2.tv_sec
, ИЛИ если они равны и t1.tv_usec
меньше, чем t2.tv_usec
, тогда…».
- 14.3. Более точное время
- Улучшенное время отклика для версии SuperServer
- Часы в Windows показывают неправильное время
- Глава 7. Дата и время
- Глава 18 Время
- 1.4.1. Кодирование во время выполнения
- Время и дата
- Время
- Не допускайте того, чтобы поток пользовательского интерфейса блокировался на длительное время
- Время показывается в 12-часовом формате, а мне привычнее 24-часовой. Как это изменить?
- Когда я не работаю за компьютером, через некоторое время он отключается. Можно ли это исправить?
- Новый винчестер издает странный звук во время работы. Он не похож на тот, с которым работал старый диск. Это нормально и...