- sys_time.h — Man Page
- Prolog
- Synopsis
- Description
- Sys time h windows
- Запрос Основного Времени CPU
- Детализированный Запрос Времени CPU
- Простое Календарное Время
- Календарь с высоким разрешением
- Разделенное Время
- Форматирование Даты и времени
- Определение Часового пояса с TZ
- Функции и Переменные для Часовых поясов
- Пример Функции Времени
sys_time.h — Man Page
Prolog
This manual page is part of the POSIX Programmer’s Manual. The Linux implementation of this interface may differ (consult the corresponding Linux manual page for details of Linux behavior), or the interface may not be implemented on Linux.
Synopsis
Description
The header shall define the timeval structure, which shall include at least the following members:
The header shall define the itimerval structure, which shall include at least the following members:
The header shall define the time_t and suseconds_t types as described in .
The header shall define the fd_set type as described in .
The header shall define the following symbolic constants for the which argument of getitimer() and setitimer():
Decrements in real time.
Decrements in process virtual time.
Decrements both in process virtual time and when the system is running on behalf of the process.
The header shall define the following as described in : FD_CLR() FD_ISSET() FD_SET() FD_ZERO() FD_SETSIZE
The following shall be declared as functions and may also be defined as macros. Function prototypes shall be provided.
Inclusion of the header may make visible all symbols from the header.
The following sections are informative.
Sys time h windows
Эта глава описывает функции для управления датой и временем, включая функции для определения текущего времени и преобразование между различными представлениями времени.
Функции времени относятся к трем категориям:
- Функции для измерения прошедшего времени CPU обсуждены в Разделе 17.1 [Время Процессора].
- Функции календарного времени обсуждены в Разделе 17.2 [Календарное Время].
- Функции для установки будильников и таймеров обсуждены в Разделе 17.3 [Установка Сигнализации].
Если вы пробуете оптимизировать вашу программу или измерять эффективность, очень полезно знать, сколько времени процессора или CPU времени она использовала в любой заданной точке. Процессорное время является отличным от фактических часов, потому что оно не включает все потраченное время на ожидание ввода-вывода или когда выполняется некоторый другой процесс. Процессорное время представляется типом данных clock_t, и дано как ряд импульсов времени относительно произвольного базового времени, отмечающего начало одиночного вызова программы.
Запрос Основного Времени CPU
Чтобы получить прошедшее CPU время, используемое процессом, Вы можете использовать функцию clock. Это средство объявлено в заглавном файле » time.h «.
Обычно, Вы вызываете функцию clock в начале и конца интервала, который Вы хотите измерить, вычитаете значения, и тогда делите на CLOCKS_PER_SEC (число импульсов времени clock в секунду), примерно так:
В системе GNU, clock _t эквивалентен long int, а CLOCKS_PER_SEC — целочисленное значение. Но в других системах, и clock _t и тип макрокоманды CLOCKS_PER_SEC может быть или целое число, или с плавающей точкой. Приведением значения времени процессора к double, см. пример выше, удостоверяется, что нужные операции работают правильно и последовательно независимо от того, каково основное представление.
Детализированный Запрос Времени CPU
Функция times возвращает более детализированную информацию относительно прошедшего процессорного времени в struct tmsobject. Вы должны включить заглавный файл » sys/times.h » чтобы использовать это средство.
Все времена даны в импульсах сигналов времени. Они — абсолютные значения; в новом процессе, они — все нуль. См. Раздел 23.4 [Создание Процесса].
Возвращаемое значение — также как значение clock (): прошедшее реальное время относительно произвольной основы. Основа — константа внутри специфического процесса, и обычно представляет время начиная с запуска системы. Значение (clock_t) (-1) возвращается, чтобы указать отказ.
Примечание Переносимости: функция clock, описанная в Разделе 17.1.1 [Базисное процессорное Время], определена в соответствии c стандартом ANSI C. Функция times — возможность POSIX.1. В системе GNU, значение, возвращенное функцией clock эквивалентно сумме tms_utime и tms_stime полей, возвращенных times.
Этот раздел описывает средства для слежения за датами и временем согласно Грегорианскому календарю.
Имеются три представления информации даты и времени:
- Календарное время (time_t тип данных) — компактное представление, обычно дает число секунд, истекающих начиная с некоторого основного времени.
- Имеется также представление времени с высоким разрешением (struct timeval тип данных) которое включает доли секунды. Используйте это представление времени вместо обычного календарного времени, когда нужна большая точность.
- Местное время (struct tm тип данных) представляет дату и время как набор компонентов, определяющих год, месяц, и так далее, для специфического часового пояса. Это представление обычно используется вместе с форматированием значений даты и времени.
Простое Календарное Время
Этот раздел описывает time_t тип данных для представления календарного времени, и функции, которые используют объекты календарного времени. Эти средства объявлены в заглавном файле » time.h «.
В других системах, time_t может быть или целым числом или с плавающей запятой.
В системе GNU, Вы можете просто вычитать значения time_t. Но в других системах, time_t тип данных может использовать некоторое другое кодирование, где вычитание не работает непосредственно.
Календарь с высоким разрешением
Тип данных time_t, используемый, чтобы представить календарное вермя имеет разрешающую способность только в одну секунду.
Некоторые приложения нуждаются в большей точности.
Так, библиотека GNU C также содержит функции, которые способны представить календарь с более высокой разрешающей способностью чем одна секунда. Функции и связанные типы данных, описанные в этом разделе объявлены в » sys/time.h «.
Некоторые значения struct timeval — используются для временных интервалов. Тогда tv_sec элемент — число секунд в интервале, а tv_usec — число микросекунд.
Часто необходимо вычесть два значения типа struct timeval. Вот самый лучший способ делать это. Он работает даже на некоторых специфических операционных системах, где tv_sec элемент имеет тип unsigned.
Возвращаемое значение — 0 при успехе и -1 при отказе. Следующее errno условие ошибки определено для этой функции: ENOSYS
операционная система не поддерживает получение информации часового пояса, и tzp — не пустой указатель. Операционная система GNU не поддерживает использование struct timezoneto для представления информации часового пояса; это — устаревшая возможность 4.3 BSD. Вместо этого, используйте средства, описанные в Разделе 17.2.6 [Функции Часового пояса].
Вы должны быть привилегированным пользователем, чтобы использовать settimeofday.
Возвращаемое значение — 0 при успехе и -1 при отказе. Следующие errno условия ошибки определены для этой функции: EPERM
Этот процесс не может устанавливать время, потому что он не привилегированный. ENOSYS
операционная система не поддерживает установку информации часового пояса, и tzp — не пустой указатель.
Аргумент delta определяет относительную корректировку, которая будет сделана относительно текущего времени. Если он отрицателен, часы системы замедляются. Если положителен, часы системы ускоряются.
Если аргумент olddelta — не пустой указатель, функция adjtime, возвращает информацию относительно любой предыдущей корректировки, которая еще не завершилась.
Эта функция обычно используется, чтобы синхронизировать часы компьютеров в местной сети.
Вы должны быть привилегированным пользователем, чтобы использовать ее. Возвращаемое значение — 0 при успехе и -1 при отказе. Следующее errno условие ошибки определено для этой функции: EPERM
Вы не имеют привилегий, чтобы установить время. Примечание Переносимости: функции gettimeofday, settimeofday, и adjtime — из BSD.
Разделенное Время
Календарное время представляется как число секунд. Это удобно для вычисления, но не имеет никакого отношения к способу, которым люди обычно представляют даты и время. Нпротив, разделенное время двоичное представление, разделенное на год, месяц, день, и так далее.
Разделенное время всегда зависит от выбора зоны местного времени, и оно также указывает, какой часовой пояс использовался.
Символы в этом разделе объявлены в заглавном файле » time.h «.
Tm_gmtoff поле расширение библиотеки GNU.
Возвращаемое значение — указатель на статическую структуру разделенного времени, которая могла бы быть записана поверх последующими обращениями к любой из функций date и time. (Но никакая другая библиотечная функция не записывает поверх содержимого этого объекта.)
Вызов localtime имеет и другой эффект: она устанавливает переменную tzname с информацией относительно текущего часового пояса. См. Раздел 17.2.6 [Функции Часового пояса].
Вспомните, что календарное время всегда выражается в координированном универсальном времени.
Mktime функция игнорирует заданное содержимое tm_wday и tm_yday элементов структуры разделенного времени. Она использует значения других компонентов, чтобы вычислить календарное время; для этих компонентов допустимо иметь ненормализованные значения вне их нормальных диапазонов. Еще mktime корректирует компоненты структуры brokentime (включая tm_wday и tm_yday).
Если заданное разделенное время не может представляться как календарное время, mktime, возвращает значение (time_t) (-1) и не изменяет содержимое brokentime.
Вызов mktime также устанавливает переменную tzname с информацией относительно текущего часового пояса. См. Раздел 17.2.6 [Функции Часового пояса].
Форматирование Даты и времени
Функции, описанные в этом разделе форматирнуют значения времени как строки. Эти функции объявлены в заглавном файле » time.h «.
Сокращения для месяцев: `Jan’, `Feb’, `Mar’, `Apr’, `May’, `Jun’, `Jul’, `Aug’, `Sep’, `Oct’, `Nov’, and `Dec’.
Возвращаемое значение указывает на статически размещенную строку, которая могла бы быть записана поверх последующими обращениями к любой из функций date и time. (Но никакая другая библиотечная функция не записывает поверх содержимого этой строки.)
Обычные символы, появляющиеся в шаблоне копируются в строку вывода s; она может включать многобайтовые символы. Спецификаторы Преобразования представляются символом ` % ‘, и заменяются в строке вывода следующим образом:
- %a сокращенный день недели согласно текущему стандарту.
- %A полный день недели согласно текущему стандарту.
- %b сокращенный месяц согласно текущему стандарту.
- %B полное название месяца согласно текущему стандарту.
- %c привилегированное представление даты и времени для текущего стандарта.
- %d день месяца как десятичное число (от 01 до 31).
- %H час как десятичное число, используя 24-часовые часы (от 00 до 23).
- %I час как десятичное число, используя 12-часовые часы (от 01 до 12).
- %j день года как десятичное число (от 001 до 366).
- %m месяц как десятичное число (от 01 до 12).
- %M минуты как десятичное число.
- %p Или «am» или «pm», согласно данному значению времени; или соответствующие строки для текущего стандарта.
- %S секунды как десятичное число.
- %U число недель текущего года как десятичное число, начинающееся с первого воскресенья как первый день первой недели.
- %W число недель текущего года как десятичное число, начинающееся с первого понедельника как первый день первой недели.
- %w день недели как десятичное число, воскресенье — 0.
- %x привилегированное представление даты для текущего стандарта, но без времени.
- %X привилегированное представление времени для текущего стандарта, но без даты.
- %y год как десятичное число, но без столетия (от 00 до 99).
- %Y год как десятичное число, включая столетие.
- %Z часовой пояс или имя или сокращение (пусто, если часовой пояс не может быть определен).
- %% литеральный символ ` % ‘.
Параметр size может использоваться, чтобы определить максимальное число символов, которое будет сохранено в массиве s, включая пустой символ завершения. Если форматируемое время требует больше чем size символов, лишние символы отбрасываются. Возвращаемое значение из strftime — число символов, помещенное в массив s, не включая пустой символ завершения. Если значение равняется размеру, это означает что массив s был слишком мал; Вы должны повторить обращение, обеспечивая больший массив.
Если s — пустой указатель, strftime не делает фактической записи чего-нибудь, но взамен возвращает число символов, которое она написала бы.
Для примера strftime, см. Раздел 17.2.7 [Пример Функции Времени].
Определение Часового пояса с TZ
В системе GNU, пользователь может определять часовой пояс посредством TZ переменной среды.
Для уточнения инфрмации относительно того, как устанавливать переменные среды, см. Раздел 22.2 [Переменные среды]. Функции для доступа к часовому поясу объявлены в » time.h «.
Значение TZ переменной может иметь один из трех форматов. Первый формат используется, когда не имеется никакого Смещения светового дня (или в летнее время) в зоне местного времени:
Смещение определяет значение которое нужно добавить к местному времени, чтобы получить значение Координированного Универсального времени. Она имеет синтаксис подобно [+ | -] hh [: mm [: ss]]. Она положительно, если зона местного времени — к западу от Главного меридиана и отрицательно, если она восточнее. Час должен быть от 0 до 24, а минуты и секунды от 0 до 59.
Например, вот, как мы определили бы Восточное Стандартное Время, но без любых Смещений Светового дня:
Остаточный член от спецификации описывает, когда смещение светового дня действует. Поле start — то, когда смещение светового дня входит в силу, а поле end — то, когда изменение будет сделано обратно к стандартному времени. Следующие форматы распознаваемы для этих полей: Jn определяет Юлианский день, с n между 1 и 365. 29 февраля никогда не рассчитывается, даже в високосные годы. N определяет Юлианский день, с n между 0 и 365. 29 февраля рассчитан в високосные годы. Mm.w.d определяет день d недели w месяца m. день d должен быть между 0 (воскресеньем) и 6. Неделя w должна быть между 1 и 5; неделя 1 — первая неделя, в которой есть день d , а неделя 5 определяет последний d день в месяце. Месяц m должен быть между 1 и 12.
Поля time определяют, когда, по местному времени происходит изменение к другому времени. Значение по умолчанию — 02:00:00.
Например, вот, как можно определить Восточный часовой пояс в Соединенных Штатах, включая соответствующее смещение светового дня и даты применимости. Нормальное смещение ПО ГРИНВИЧУ — 5 часов; так как это — к западу от главного меридиана, знак положителен. Летний период начинается в первое воскресенье апреля в 2:00am, и кончается в последнее воскресенье октября в 2:00am.
Чтобы быть строго правильным, преобразование дат и времени должно быть основано на действующем плане. Однако, система не имеет никаких средств, чтобы допустить Вам определять, как план изменился. Наибольшее что Вы может сделать — определить один специфический план обычно план текущего дня.
Третий формат походит на:
Если переменная среды TZ не имеет значения, операция выбирает часовой пояс по умолчанию. Каждая операционная система имеет собственные правила для выбора заданного по умолчанию часового пояса, так что относительно этого мы можем сказать совсем немного.
Функции и Переменные для Часовых поясов
Следующие переменные определены для совместимости с System V Unix. Эти переменные устанавливаются вызоввом localtime.
Пример Функции Времени
Вот пример программы, показывающий использование некоторых функций местного и календарного времени.
Функции alarm и setitimer обеспечивают механизм прерывания процесса, в некоторое время. Они делают это, устанавливая таймер; когда время таймер истекает, процесс получает сигнал.
Каждый процесс имеет три доступных независимых таймера интервала:
- Таймер в реальном времени, который считает время как часы. Этот таймер посылает сигнал SIGALRM процессу, когда время истекает.
- Виртуальный таймер, который считает процессорное время, используемое процессом. Этот таймер посылает сигнал SIGVTALRM процессу, когда время истекает.
- Таймер профилирования, который считает оба: процессорное время, используемое процессом, и процессорное время, потраченное в системных вызовах от имени процесса. Этот таймер посылает сигнал SIGPROF процессу, когда время истекает.
Вы можете иметь только один таймер каждого вида в любое заданное время. Если Вы устанавливаете таймер, который еще не истек, этот таймер будет сброшен в новое значение.
Вы должны установить обработчик для соответствующего сигнала alarm, используюя signal или sigaction перед обращением к setitimer или alarm. Иначе, необычная цепочка событий может заставлить таймер исчерпать время прежде, чем ваша программа установит обработчик, и в этом случае она будет завершена, так как это — заданное по умолчанию действие для сигналов alarm. См. Главу 21 [Обработка Сигнала].
Функция setitimer — первичный способ для установки будильника. Это средство объявлено в заглавном файле » sys/time.h «. Функция alarm, объявленная в » unistd.h «, обеспечивает несколько более простой интерфейс для установки таймера в реальном времени.
Тип данных Struct timeval описан в Разделе 17.2.2 [Календарь с высоким разрешением].
Если old — не пустой указатель, setitimer возвращает информацию относительно любого предыдущего неистекшего таймера того же самого вида в структуре, на которую он указывает.
Возвращаемое значение — 0 при успехе и -1 при отказе. Следующие errno условия ошибки определены для этой функции: EINVAL
интервал таймера был слишком большой.
Возвращаемое значение и условия ошибки — такие же как для setitimer.
Возвращаемое значение указывает, сколько секунд оставалось прежде, чем предыдущий сигнал был бы послан. Если не было никакого предыдущего сигнала, alarm возвращает нуль.
Функция alarm могла бы быть определена в терминах setitimer примерно так:
Если Вы просто хотите, чтобы ваш процесс ждал данное число секунд, Вы должен использовать функцию sleep. См. Раздел 17.4 [Sleep].
Вы не должны рассчитать на сигнал, прибывающий точно, когда таймер истекает. В многопроцессорной среде имеется обычно некоторая задержка.
Примечание Переносимости: setitimer и getitimer — функции UNIX BSD, в то время как функция alarm определена POSIX.1 стандартом. Setitimer более мощная чем alarm, но alarm более широко используется.
Sleep дает простой способ заставить программу ждать некоторый период времени. Если ваша программа не использует сигналы (за исключением завершения), то Вы можете расчитывать, что sleep будет ждать заданное количество времени. Иначе, sleep может возвращаться, если прибывает сигнал; если Вы хотите ждать данный период независимо от сигналов, используйте select (см. Раздел 8.6 [Ждущий ввод — вывод] ) и не определяйте ни каких описателей ожидания.
Если функция sleep возвращает значение по истечении времени, то это значение нуль. Если она возвращается после сигнала, возвращаемое значение — остающееся время ожидания sleep.
Функция sleep объявлена в » unistd.h «.
Вы можете использовать select и делать период ожидания, совершенно точным. (Конечно, загрузка системы может вызывать неизбежные дополнительные задержки, если машина не специализирована одному приложению, не имеется никакого способа, которым Вы можете избежать этого.)
Функция getrusage и тип данных struct rusage используется для исследования типа использования процесса. Они объявлены в » sys/resource.h «.
В большинстве систем, processes имеет только два допустимых значения:
В системе GNU, Вы можете также запрашивать относительно специфического дочернего процесса, определяя ID процесса.
Возвращаемое значение getrusage — нуль при успехе, и -1 при отказе.
Аргумент EINVAL processes не допустим.
Еще один способ получения типа использования для специфического дочернего процесса — функцией wait4, которая возвращает общие количества для дочернего процесса при его завершении. См. Раздел 23.8 [BSD Функции Ожидания].
Дополнительная историческая функция для исследования типов использования, vtimes, обеспечивается но здесь не описана. Она объявлена в » sys/vtimes.h «.
Вы можете определять ограничения использования ресурса для процесса. Когда процесс пробует превышать ограничение, он может терпеть неудачу, в зависимости от ограничения. Каждый процесс первоначально наследует значения ограничений от родителя, но он может впоследствии изменять их.
Символы в этом разделе определены в » sys/resource.h «.
Возвращаемое значение — 0 при успехе и -1 при отказе. Единственое возможное errno условие ошибки — EFAULT.
Возвращаемое значение — 0 при успехе и -1 при отказе. Следующее errno условие ошибки возможно: EPERM
Вы пробовали изменять максимально допустимое значение ограничения, но Вы не имеете привилегий, чтобы сделать это.
Rlim_cur Текущее значение рассматриваемого ограничения.
Rlim_max Максимально допустимое значение рассматриваемого ограничения. Вы не можете устанавливать текущее значение ограничения больше чем этот максимум. Только root может изменять максимально допустимое значение.
В getrlimit, эта структура — вывод; она получает текущие значения. В setrlimit она определяет новые значения.
Вот список ресурсов, для которых Вы можете определять ограничения.
Две исторических функции для установки ограничений ресурса, ulimit и vlimit, не зарегистрированы здесь. Они объявлены в » sys/vlimit.h » и исходят ИЗ BSD.
Когда отдельные процессы выполняются, их приоритеты определяют то, какую часть ресурсов CPU каждый процесс получает. Этот раздел описывает, как Вы можете читать и устанавливать приоритет процесса. Все эти функции и макрокоманды объявлены в » sys/resource.h «.
Промежуток допустимых значений зависит от операционной системы, но обычно он выполняется от -20 до 20. Меньшее значение приоритета означает что процесс выполняет чаще. Эти константы описывают некоторые значения: PRIO_MIN самое маленькое допустимое значение приоритета. PRIO_MAX самое большое допустимое значение приоритета.
Возвращаемое значение — значение приоритета при успехе, и -1 при отказе. Следующее errno условие ошибки возможно для этой функции: ESRCH
комбинация class и id не соответствует никакому существующему процессу. EINVAL
значение class не допустимо. Когда возвращаемое значение -1, это может указывать отказ, или значение приоритета.
Единственый способ различить состоит в том, чтобы установить errno = 0 перед вызовом getpriority, и тогда использовать errno!= 0 позже как критерий для отказа.
Возвращаемое значение — 0 при успехе и -1 при отказе. Следующее errno условие ошибки определено для этой функции: ESRCH
комбинация class и id не соответствует никакому существующему процессу. EINVAL
значение класса не допустимо. EPERM
Вы пробовали устанавливать приоритет процесса некоторого другого пользователя, и Вы не имеете привилегий для этого. EACCES
Вы пробовали понизить приоритет процесса, и Вы не имеете привилегий для этого. Аргументы class и id вместе определяет набор процессов, которыми Вы заинтересованы. Вот возможные значения для class:
Если id аргумент — 0, то обрабатывается текущий процесс, текущая группа процесса, или текущий пользователь, согласно классу.