- Linux.yaroslavl.ru
- Русские Блоги
- Функции времени, связанные с Linux
- Тип времени
- 1.1 time_t
- 1.2 struct tm
- 1.3 struct timeval
- 1.4 struct timespec
- 2. Преобразование типа времени
- 2.1 Время преобразования типа
- 2.2 Пример
- 3. Задержка функции и функции таймера
- 3.1 Функция сна
- 3.2 Функция задержки
- 3.3 Таймер Функция
- 3.4 Пример
Linux.yaroslavl.ru
Эта глава посвящен функциям работы со временем (прошедшем, текущим или вычисленным) и для вычислений, использующих время.
Файл time.h определяет три типа: clock_t и time_t оба служат для представления времени в удобном для произведения арифметических операций виде (В этой реализации величины типа clock_t имеют наивысшую точность, воэможную для данного компьютера, а точность величин типа time_t составляет одну секунду.), тип size_t определен для представления размеров.
В time.h также определяется структура tm для стандартного представления времени по грегорианскому календарю как цепочки чисел со следующими полями: tm_sec
День недели: число дней с воскpесенья.
Число дней, пpошедших с пеpвого янваpя.
Флаг летнего вpемени: положительное значение означает, что действyет летнее вpемя, нyлевое — что оно не действyет, отpицательное — что данных об этом нет.
_asctime_r является повторно входимой версией функции asctime.
Дополнительный аргумент reent — указатель на структуру, содержащую информацию для обеспечения повторной входимости.
Возвращается yказатель на строку, содержащую отформатированное значение timestamp.
Стандарт ANSI требует наличия функции asctime.
asctime не требует никаких процедур ОС.
Выдается общее количество процессорного времени, прошедшего с момента начала выполнения программы в единицах, определенных машинно-зависимым макро CLOCKS_PER_SEC. Если такое измерение провести нельзя, то выдается -1.
Стандарт ANSI требует наличия функции clock и макро CLOCKS_PER_SEC.
Требуется процедура ОС: times.
Возвращается yказатель на строку, содержащую отформатированное значение timestamp.
Стандарт ANSI требует наличия функции ctime.
ctime не требует никаких процедур ОС.
Выдается pазница (в секундах) между tim2 и tim1, типа double.
Стандарт ANSI требует наличия функции difftime, и определяет, что pезyльтат должен выдаваться в секyндах во всех реализациях.
difftime не требует никаких процедур ОС.
gmtime создает традиционное представление времени в статической памяти, каждый вызов gmtime или localtime переписывает это представление, созданное какой-либо из этих функций.
Возвращается указатель на традиционное представление времени (struct tm).
Стандарт ANSI требует наличия функции gmtime.
gmtime не требует никаких процедур ОС.
localtime создает традиционное представление времени в статической памяти, каждый вызов gmtime или localtime переписывает это представление, созданное какой-либо из этих функций.
mktime — обратная к localtime функция.
Возвращается yказатель на традиционное представление времени (struct tm).
Стандарт ANSI требует наличия функции localtime.
localtime не требует никаких процедур ОС.
localtime — функция, обратная к mktime.
Если содержимое структуры в timp не является правильным представлением календарного времени, то выдается -1. В противном случае выдается время преобразованное в значение time_t.
Стандарт ANSI требует наличия функции mktime.
mktime не требует никаких процедур ОС.
Для управления форматированием вывода используется строка в format. *format может содержать два типа спецификаций: текст для прямого копирования в форматируемую строку и спецификации преобразования времени. Спецификации преобразования времени состоят из последовательностей из двух знаков, начинающихся с % (%% включает знак процента в вывод). Каждая определенная спецификация преобразования выбирает поле в календарного времени, записанного в *timp, и преобразовывает его в строку одним из следующих способов: %a
Сокращение для дня недели.
Полное имя для дня недели.
Сокращение для названия месяца.
Полное имя месяца.
Строка, представляющая полную дату и время в виде Mon Apr 01 13:13:13 1992
День месяца, представленный двумя цифрами.
Час (на 24-часовых часах), представленный двумя цифрами.
Час (на 12-часовых часах), представленный двумя цифрами.
Число дней в году, представленное тремя цифрами (от 001 до 366).
Номер месяца, представленный двумя цифрами.
Минута, представленная двумя цифрами.
Секунда, представленная двумя цифрами.
Номер недели, представленный двумя цифрами (от 00 до 53; первая неделя считается начавшейся в первое воскресенье года). Смотрите также %w.
День недели, представленный одной цифрой, воскресенье -нулем.
Другая версия номера недели: как %u, но считая первую неделю с первого понедельника года.
o %x Строка, полностью представляющая дату в формате Mon Apr 01 1992
Строка, представляющая полное время дня (часы, минуты и секунды) в формате 13:13:13
Последние две цифры года.
Полный год, фоpматиpованный в четыpе цифpы.
Определенно в ANSI C для выделения временного промежутка, если это возможно; в данной реализации это отсутствует (%z допускается, но по нему ничего не выводится).
Если отформатированное время занимает не более чем maxsize знаков, то выдается длина отформатированной строки. В противном случае, если форматирование было прекращено из-за нехватки места, то выдается 0 0 и строка, начинающаяся в s, соответствует тем частям *format, которые могут быть полностью представлены в пределе maxsize знаков.
Стандарт ANSI требует наличия функции strftime, но не определяет содержимое *s, если отформатированная строка занимает больше чем maxsize знаков.
strftime не требует никаких процедур ОС.
Возвращаемая -1 означает, что текущее время недоступно; в противном случае результат представляет текущее время.
Стандарт ANSI требует наличия функции time.
В некотоpых pеализациях тpебyется пpоцедypа ОС gettimeofday.
Источник
Русские Блоги
Функции времени, связанные с Linux
Эта статья предназначена для простого резюме временных функций, общих для системного программирования Linux. Давайте сначала посмотрим на несколько типов данных, а затем посмотрите, как преобразуются несколько временных форматов и суммируют соответствующие функции получения времени задержки времени и системы.
Тип времени
1.1 time_t
На самом деле, длинное целое число, представляет время UTC (0: 0AM 0:05 1 января 1970 года, время эпохи системы Linux) к текущей системе вторичной разницы во времени, обычно используется для временных функций:
Используя функцию Ctime (), мы можем преобразовать функцию времени добраться до времени и даты нашего привычного использования и вернуть его в строку.
Кроме того, если вы хотите сравнить разницу времени между двумя раз, вы можете использовать функцию Difftime ():
1.2 struct tm
Структура TM называется взорванным временем в стандарте ANSI. Из определения следующего мы также можем увидеть, что время разлагается в очень подробную область.
Функции Gmtime () и LoceTime () могут преобразовать форматы данных Time_T в форматы TM. Разница состоит в том, что результатом преобразования GMTime () — это информация, соответствующая GMT (центральному часовым поясам), и результатом преобразования локального () функции — это информация о текущем часовом поясе.
Функция функции MKTime () точно противоположная, и она преобразует структуру TM в Time_T тип времени.
Функция ASCTIME () представляет собой время и дату представления структуры TM в наше привычное использование и возвращается в строку.
1.3 struct timeval
Структура Timeval может получить время точности уровня MS, которая определяется следующим образом:
Функция, используемая структурой Timeval: GetTimeOfDay () и SettimeOfDay ():
1.4 struct timespec
Структура TimeSpec может обеспечить более высокие значения времени прецизионного времени, а уровень NS определяется следующим образом:
Соответствующая функция: clock_getime ():
Если CLK_ID используется для разработки соответствующего типа часов, могут использоваться разные типы для получения различных значений времени, с четырьмя видами:
- CLOCK_REALTIME: Система — это в режиме реального времени, начиная с UTC, если время изменяется соответственно пользовательскими изменениями;
- CLOCK_MONOTONIC:Когда система запускает запуск, даже если пользователь меняет время;
- CLOCK_PROCESS_CPUTIME_ID:Этот процесс начинает выполнять время в текущую программу систем процессора;
- CLOCK_THREAD_CPUTIME_ID:Этот рычаг начинается со временем выполнения в текущей программной системе CPU.
2. Преобразование типа времени
2.1 Время преобразования типа
Введенные соответствующие функции времени и соответствующие функции обработки, давайте сделаем простой сводку различных типов времени, как показано ниже:
Большинство функций на рисунке были описаны в разделе 1, где две функции используются в структурных типах TM и пользователь, определенные в типе структуры TM и определенным пользователем. Convert между форматом отображения.
Функция STRFTIME () преобразует формат TM в формат формата и поместите его в главный адрес, а формат общего формата:
- Микро-неделя
- % Полное имя
- Микрофин
- % B полное имя
- Строка времени даты% C Standard
- Опубликовать два числа в% c
- Первый день ежемесячного указа
- % D месяц / день / год
- % e в двух символьном домене, первый день ежемесячного представления
- % F лет — месяц — день
- Следующие два числа% г старых, используйте недельный год
- % G старше, используйте недельный год
- % h Короткопичное имя месяца
- % H 24 часа часа
- % I 12 часов часов
- % J разумно выразил первые несколько дней
- Месяц, указанный% m dec
- Минимальное количество минут, обозначенных% м
- % N новый символ линии
- % P Местный AM или PM эквивалентно отобразить
- % R 12 часов времени
- % R показывает часы и минуты: HH: мм
- % S Десятичное количество секунд
- % T горизонтальная вкладка
- % T отображение времени STATH: HH: MM: SS
- % U Еженедельный день, в понедельник первый день (стоимость от 0 до 6, понедельник 0)
- % U, Годилой неделя, поставить воскресенье в качестве первого дня (стоимость от 0 до 53)
- Процент недели, используя ежедневный год
- Выполнение% WECIMAL (значение от 0 до 6, воскресенье 0)
- Неделя% W, в понедельник в качестве первого дня (стоимость от 0 до 53)
- % X Стандартная строка даты
- % X Стандартная строка времени
- % Y не займет десять лет (стоимость от 0 до 99)
- % Y принимает десятичный год века
- % Z,% Z Название часового пояса, если имя часового пояса не может быть получено, верните пустые символы.
- %% процентов знака
Функция STRPTIME () выполняет противоположную работу, преобразуйте функцию Rentime () обратно в формат структуры TM. Это определяется следующим образом:
2.2 Пример
После того, как рассказываю это, давайте пройдем простой пример:
3. Задержка функции и функции таймера
3.1 Функция сна
В пространстве пользователя Linux мы можем использовать семейство функции Sleep, чтобы добиться отложенных функций, следующие три функции сна обеспечивают три прецизионные задержки:
3.2 Функция задержки
В слое ядра Linux мы можем использовать семейство функции задержки для достижения различных функций времени точности:
3.3 Таймер Функция
Функции таймера, доступные в системе Linux, имеют много, такие как тревоги, выберите и многое другое. Этот раздел введет высокоточный таймер, который поставляется из стандарта POSIX. Так же, как нить, описанная выше, различные механизмы синхронизации, которые также имеют набор таких функций, как создание, удаление, съемку, настройка, все из которых включены в файл Time.h.
Создать таймер
Успешно создаваемые возвраты 0 не удалось вернуть -1 и обновить код ошибки. TimerId — это идентификатор таймера, который создает успех, а два других параметра являются относительно сложными:
(1). clockid_t: Используемые типы таймеров, в основном включают в себя:
- CLOCK_REALTIME: Время спасено, например, 10 точка 10 Отдел, мы встали 10min Таймер, 5min После этого мы изменим системное время в 10 точка 10 Дивизион, таймер также пройдет 10min Когда. (Предположим, мы меняем время в это время 10 точка 25 Какое поведение ветвь? Несомненно
- CLOCK_MONOTONIC: Таймер строго основан на установленном времени, не может быть изменен, изменяя время;
- CLOCK_PROCESS_CPUTIME_ID: Таймер записывает только фактические затраты на фактические затраты; например, можно получить только 50% времени процессора, чтобы сделать процесс по-настоящему пройти через 10 минут, до 10:30 таймера истекает.
- CLOCK_THREAD_CPUTIME_ID: С потоками для синхронизанных объектов нить в текущем процессе действительно проходит в течение определенного периода времени. Timer 。
(2). Sigevent : Если параметр EVP NULL, таймер истекает, генерирует сигнал по умолчанию, такой как Clock_realTimer, сигнал по умолчанию — SigalRM, а значение выглядит следующим образом:
среди них sigev_notify Говорят, что есть несколько способов:
- SIGEV_NONE: Не производить уведомление, когда истек;
- Sigev_signal: процесс будет доставлен в процесс для сигнала sigev_signo, чтобы указать, какой сигнал используется;
- SIGEV_THREAD:Новая тема будет инициирована, когда истекает таймер; в этом случае требуется sigev_notify_function. Когда истекает таймер, нить будет запущена с использованием этой функции в качестве впуска для обработки сигнала; SIGEV_VALUE сохраняет параметры входящего SIGEV_NOTIFY_FUCT. Sigev_notify_attributes Если это не пусто, это должно быть указателем на pthread_attr_t для установки свойств потока (например, размер стека, отсоединение статуса и т. Д.);
- SIGEV_THREAD_ID:Сигнал отправляется на указанную нить, обычно в сочетании с SIGEV_Signal, поэтому, когда истекает таймер, система отправляет сигнал на поток, указанную в SIGEV_NOTIFY_THREAD_ID, в противном случае любой поток в процессе может получить сигнал.
2. Начать таймер
Для new_value it_value используется для указания времени истечения срока действия текущего таймера. Когда таймер истекает, значение iT_Value будет обновляться в значение iT_Interval. Если значение iT_Interval равно 0, таймер не является планировщиком пространства временного пространства, и после истечения истечения IT_Value, он вернется к состоянию SCASTAPT.
Иногда приложение запускает таймер с интервалом времени, затем измените интервал времени таймера, который может быть реализован путем изменения new_value; если приложение хочет понять интервал времени перед изменением набора временных интервалов, его передается NONULL OLL_VALUE POINTER, поэтому, когда return returs time_settime () red_value сохраняет последнюю настройку интервала времени таймера. В большинстве случаев нам это не нужно, вы можете просто установить Old_Value на NULL, игнорируйте его.
Флаги только 2: 0 и Timer_abStime. Когда флаги 0, new_value-> it_value означает, что время времени, когда таймер сначала истек (например, я надеюсь, что время 2 секунды через 2 секунды); когда флаги Timer_abStime, new_value-> it_value означает первое завершение абсолютного времени ( Например, когда таймер истекает в 01:23:45); если new_value-> it_value установите абсолютное время, чем текущее абсолютное время, то таймер истекает немедленно; если часы clock_realtime отрегулируются, первое время таймера скорректирован соответствующим образом.
3. Получите оставшееся время таймера
4. Количество превышающих ограничений для получения таймеров
Возможно, что таймер истекает, и сигнал, генерируемый в последнее время таймера, все еще находится в приостановленном состоянии. В этом случае один из сигналов может быть потерян. Это ограниченный по времени таймера. Программа может определить это переполнение количества исключений, вызывая Timer_GetoverRun. Оверксирующий таймер может происходить только на сигнале, генерируемом тем же таймером. Несколькими таймерами, даже те таймеры, которые используют те же часы и сигналы, сгенерированные сигналы будут очереде, не потерявшись.
6. Удалить таймер
3.4 Пример
Давайте посмотрим на примере использования таймера:
Как видно из прогона, начальный таймер — 4S истечение срока действия, а последнее срок действия 3S:
Примечание:
- Чтобы использовать таймер POSIX, вы хотите динамически ссылку Librit (Live Dynamic Library Glibc) при компиляции добавьте опцию -lrt.
- ASCTIME (), строка, возвращаемая функцией Ctime (), заканчивается «\ n».
Написано в WEN: эта статья является основной запиской, договоренностью главы и содержание AUPUE. Есть упущения или неправильные места в тексте, пожалуйста, также просветите меня.
Источник