time(2) получить время в секундах

ОБЗОР

#include <time.h>

time_t time(time_t *tloc);

ОПИСАНИЕ

time() возвращает количество секунд, которое прошло с начала эпохи, 1970-01-01 00:00:00 +0000 (UTC).

Если tloc не равно NULL, то возвращаемое значение также сохраняется в область памяти, на которую указывает tloc.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При удачном завершении работы возвращается время в секундах, прошедшее с начала эпохи. При ошибке возвращается ((time_t) -1), а errno устанавливается должным образом.

ОШИБКИ

EFAULT
tloc указывает за пределы доступного адресного пространства (однако см. ОШИБКИ).

В системах, где обёрточная функция time() библиотеки C вызывает реализацию, предоставляемую vdso(7) (то есть нет ловушки в ядре), из-за некорректного адреса может генерироваться сигнал SIGSEGV.

СООТВЕТСТВИЕ СТАНДАРТАМ

SVr4, 4.3BSD, C89, C99, POSIX.1-2001. В POSIX не определены условия возникновения ошибок.

ЗАМЕЧАНИЯ

В POSIX.1 для определения секунд, прошедших с начала эпохи используется формула для приблизительного подсчёта количества секунд между указываемым временем и началом эпохи. Эта формула учитывает тот факт, что все годы, номер которых делится на 4, считаются високосными, но годы, которые делятся на 100 не високосные, если они также не делятся на 400 (которые нужно считать високосными). Это значение не является указанием на точное количество секунд между заданным временем и началом эпохи вследствие игнорирования високосных секунд и по причине того, что время в часах необязательно синхронизировано со временем стандартного источника. Считается, что это значение соответствует настоящему количеству секунд, прошедшему с начала эпохи. Дополнительную информацию можно найти в POSIX.1-2008 Rationale A.4.15.

В Linux, вызов time() со значением tloc равным NULL, не может завершиться ошибкой EOVERFLOW, даже с ABI, у которого time_t — знаковое 32-битное целое и количество тактов часов выходит за пределами времени 2**31 (2038-01-19 03:14:08 UTC, високосные секунды игнорируются) (в POSIX.1 допускается, но не требуется возврат ошибки EOVERFLOW в случае, когда количество секунд с начала эпохи не влезает в time_t). Вместо этого, поведение в Linux является не определённым, когда системное время выходит за границы диапазона time_t. Приложения, которые должны работать после 2038 года, должны использовать ABI, в котором тип time_t больше 32 бит.

ДЕФЕКТЫ

Ошибка, возвращаемая из этого системного вызова неотличима от успешного выполнения в случае, когда момент времени — за несколько секунд до эпохи, поэтому обёрточная функция библиотеки C никогда не изменяет errno при возврате.

Аргумент tloc устарел и в новом коде всегда должен быть равен NULL. Если tloc равно NULL, то вызов не может завершиться ошибкой.