1tm.h(3) Library Functions Manual tm.h(3)
2
3
4
6 tm.h - Время и таймеры
7
8
10 #include <time.h>
11 #include 'bee2/defs.h'
12
13
14 Определения типов
15 typedef u32 tm_ticks_t
16 Число тактов таймера
17 typedef time_t tm_time_t
18 Время
19
20 Функции
21 tm_ticks_t tmTicks ()
22 Показания таймера
23 tm_ticks_t tmFreq ()
24 Частота таймера
25 size_t tmSpeed (size_t reps, tm_ticks_t ticks)
26 Скорость
27 tm_time_t tmTime ()
28 UNIX-время
29 tm_time_t tmTimeRound (tm_time_t t0, tm_time_t ts)
30 Округленное UNIX-время
31 bool_t tmDate (size_t *y, size_t *m, size_t *d)
32 Дата
33 bool_t tmDate2 (octet date[6])
34 Дата в формате YYMMDD.
35 bool_t tmDateIsValid (size_t y, size_t m, size_t d)
36 Корректная дата?
37 bool_t tmDateIsValid2 (const octet date[6])
38 Корректная дата в формате YYMMDD?
39
42 Функции tmFreq(), tmTicks() отвечают за работу с наиболее точным
43 таймером среди доступных. Показания выдаются в виде значения типа
44 tm_ticks_t.
45
46 Наиболее точным таймером на платформах x86, x64 является регистр RDTSC,
47 который обновляется с частотой процессора.
48
49 Таймер определяется в следующей очередности (до первого найденного): --
50 на платформах x86, x64 использовать регистр RDTSC; -- в среде Windows
51 использовать функции QueryPerformance[Counter|Frequency](); -- в среде
52 Unix использовать функции clock_get[time|res](); -- использовать
53 функцию clock() и константу CLOCK_PER_SEC (см. time.h).
54
56 Системное время задается числом секунд, прошедших с полуночи 01 января
57 1970 года (1970-01-01T00:00:00Z в формате ISO 8601). Использованную
58 шкалу времени прнято называть UNIX-время. Начало отсчета -- старт 'эры
59 UNIX' (Unix Epoch).
60
61 Отметка времени представляется типом tm_time_t. Этот тип повторяет
62 системный тип time_t и наследует его неопределенность по разрядности и
63 знаковости.
64
65 Предупреждения
66 10 января 2004 счетчик секунд принял значение 2^30. 32-битовый
67 счетчик исчерпает себя 19 января 2038 года.
68
70 Дата задается тройкой (год y, месяц m, день месяца d).
71
72 Месяцы нумеруются от 1 (январь) до 12 (декабрь). Дни месяца -- от 1 до
73 28, 29, 30 или 31.
74
75 Прим.
76 Даты, в которых y < 1583, считаются некорректными (григорианский
77 календарь был введен в 1582 году).
78
79 Тройка кодируется либо тремя беззнаковыми целыми либо 6 октетами по
80 схеме YYMMDD. В последнем случае каждый октет представляет один
81 десятичный знак даты:
82
83 • первые два октета - год текущего (21-го века) века;
84
85 • следующие два октета - месяц;
86
87 • последние два октета - день месяцв.
88
89 Пример: {0x02, 0x02, 0x0, 0x7, 0x2, 0x9}.
90
91 Дата определяется с привязкой к текущему часовому поясу.
92
93 Прим.
94 Даты в формате YYMMDD используются в CV-сертификатах (см. btok.h).
95
97 tm_ticks_t
99 bool_t tmDate (size_t * y, size_t * m, size_t * d)
100 Определяются текущие (год y, месяц m, день месяца d). Каждый из
101 указателей y, m, d может быть нулевым, и тогда соответствующее поле
102 даты не возвращается.
103
104 Предусловие
105 Ненулевые указатели y, m, d корректны.
106
107 Возвращает
108 TRUE, если дата успешно определена, и FALSE в противном случае.
109
110 Аргументы
111 y год
112 m месяц
113 d день
114
115 bool_t tmDate2 (octet date[6])
116 Определяется текущая дата date в формате YYMMDD.
117
118 Предусловие
119 Указатель date корректен.
120
121 Возвращает
122 TRUE, если дата успешно определена, и FALSE в противном случае.
123
124 Аргументы
125 date дата
126
127 bool_t tmDateIsValid (size_t y, size_t m, size_t d)
128 Проверяется корректность даты (год y, месяц m, день месяца d).
129
130 Возвращает
131 Признак корректности.
132
133 Аргументы
134 y год
135 m месяц
136 d день
137
138 bool_t tmDateIsValid2 (const octet date[6])
139 Проверяется корректность даты date в формате YYMMDD.
140
141 Возвращает
142 Признак корректности.
143
144 Прим.
145 Проверяется в том числе корректность указателя date.
146
147 Аргументы
148 date дата
149
150 tm_ticks_t tmFreq ()
151 Возвращается число тактов, которое выполняет в секунду наиболее точный
152 из доступных таймеров.
153
154 Предупреждения
155 Замер частоты может занять время (в пределах 0.1 секунды).
156
157 Возвращает
158 Число тактов в секунду или 0 в случае ошибки.
159
160 size_t tmSpeed (size_t reps, tm_ticks_t ticks)
161 По числу reps экспериментов за ticks тактов определяется число
162 экспериментов, которое можно выполнить за 1 секунду.
163
164 Предупреждения
165 Расчеты ведутся в dword. Может быть потеря точности, связанная с
166 переполнением.
167
168 Возвращает
169 Число экспериментов в секунду или SIZE_MAX в случае ошибки.
170
171 Аргументы
172 reps число экспериментов
173 ticks число тактов
174
175 tm_ticks_t tmTicks ()
176 Возвращается число тактов, выполненных наиболее точным из доступных
177 таймеров. Таймер начинает работу до первого вызова функции. Показания
178 таймера монотонно увеличиваются вплоть до переполнения счетчика тактов.
179
180 Возвращает
181 Число тактов или 0 в случае ошибки.
182
183 tm_time_t tmTime ()
184 Возвращается число секунд, прошедших с момента 1970-01-01T00:00:00Z.
185
186 Возвращает
187 Число секунд или TIME_ERR в случае ошибки.
188
189 tm_time_t tmTimeRound (tm_time_t t0, tm_time_t ts)
190 Возвращается округленное UNIX-время (tmTime() - t0) / ts, где t0 ---
191 базовая отметка времени (начало отсчета), ts -- шаг времени.
192
193 Возвращает
194 Округленное UNIX-время или TIME_ERR в случае ошибки.
195
196 Прим.
197 Ошибками считаются следующие ситуации: ts == 0, tmTime() < t0.
198
199 Процедура округления соответствует RFC 6238.
200
201 Аргументы
202 t0 начало отсчета
203 ts шаг времени
204
206 Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
207
208
209
210Библиотека Bee2 Ср 19 Июл 2023 00:00:00 tm.h(3)