Книга: Linux программирование в примерах
6.1.1. Получение текущего времени: time() и difftime()
6.1.1. Получение текущего времени: time()
и difftime()
Системный вызов time()
получает текущие дату и время; difftime()
вычисляет разницу между двумя значениями time_t
:
#include <time.h> /* ISO С */
возвращает текущее время. Если параметр
time_t time(time_t *t);
double difftime(time_t time1, time_t time0);
time()t
не равен NULL
, переменная, на которую указывает t
, также заполняется значением текущего времени. Функция возвращает (time_t)(-1)
, если была ошибка, устанавливая errno
.
Хотя ISO С не указывает, чем является значение time_t
, POSIX определяет, что оно представляет время в секундах. Поэтому это предположение является обычным и переносимым. Например, чтобы посмотреть, что значение времени представляет отметку в прошлом шесть месяцев назад или позже, можно использовать код, подобный этому:
/* Для краткости проверка ошибок опущена */
time_t now, then, some_time;
time(&now); /* Получить текущее время */
then = now - (6L * 31 * 24 * 60 * 60); /* Примерно 6 месяцев назад */
/* ...установить какое-нибудь время, например, через stat()... */
if (some_time < then)
/* более 6 месяцев назад */
else
/* менее 6 месяцев назад */
Однако, поскольку переносимый код может потребоваться запустить на не-POSIX системах, существует функция difftime()
для вычисления разницы между двумя значениями времени. Тот же самый тест с использованием difftime()
можно было бы написать таким способом:
time_t now, some_value;
const double six_months = 6.0 * 31 * 24 * 60 * 60;
time(&now); /* Получить текущее время */
/* ...установить какое-нибудь время, например, через stat()... */
if (difftime(now, some_time) >= six_months)
/* более 6 месяцев назад */
else
/* менее 6 месяцев назад */
Возвращаемым типом difftime()
является double
, поскольку time_t
может также содержать доли секунд. На системах POSIX он всегда представляет целые секунды.
В обоих предыдущих примерах обратите внимание на использование типизированных констант, чтобы форсировать выполнение вычислений с нужным математическим типом: 6L
в первом случае для целых long
, 6.0 во втором случае для чисел с плавающей точкой
- Получение статистики
- Уменьшение времени, необходимого для резервного копирования и восстановления
- Ограничение времени ожидания для транзакций (Lock timeout)
- DEADLOCK TIMEOUT
- CONNECTION TIMEOUT
- Timestamp request
- 7.12. Объективизация времени
- Квант времени
- Chapter 2 Building and Deploying a Run-Time Image
- Получение помощи
- Получение помощи по работе с книгой и компакт-диском
- Получение помощи по Windows SharePoint Services 3.0