Общие библиотечные интерфейсы – часть 1 — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Общие библиотечные интерфейсы – часть 1

2021-01-29 81
Общие библиотечные интерфейсы – часть 1 0.00 из 5.00 0 оценок
Заказать работу

 

В главе 5 «Каталоги и служебные данные файлов» мы видели, что непосредственное чтение каталога возвращает имена файлов в том порядке, в каком они хранятся в каталоге. Мы также видели, что содержит всю информацию о файле за исключением его имени. Однако, некоторые компоненты этой структуры не могут использоваться непосредственно; они являются просто числовыми значениями.

В данной главе представлена оставшаяся часть API, необходимая для полного использования значений компонентов. Мы по порядку рассматриваем следующие темы: значения для представления времени и функций форматирования времени; функции сортировки и поиска (для сортировки имен файлов или других данных); типы и для представления пользователей, групп и функций, которые сопоставляют их с соответствующими именами пользователей и групп; и наконец, функцию для проверки того, что дескриптор файла представляет терминал.

 

Времена и даты

 

Значения времени хранятся в типе, который известен как. Стандарт ISO С гарантирует, что это числовой тип, но во всем остальном никак не указывает, чем именно он является (целым или с плавающей точкой), как и не указывает степень точности хранящихся в нем значений.

На системах GNU/Linux и Unix значения представляют «секунды с начала Эпохи». Эпоха представляет собой начало записываемого времени, которое относится к полночи 1 января 1970 г. по UTC. На большинстве систем является С. Для 32‑разрядных систем это означает, что переполнится 19 января 2038 г. К тому времени, мы надеемся, тип будет переопределен как по меньшей мере 64‑разрядное значение.

Для получения текущего времени, вычисления разницы между двумя значениями, преобразования значений в более удобное представление и форматирования обоих представлений в виде символьных строк существуют различные функции. Вдобавок, представление даты и времени можно преобразовать обратно в, доступна также ограниченная информация по часовым поясам.

Отдельный набор функций предоставляет доступ к текущему времени с разрешением, большим чем одна секунда. Функции работают с предоставлением двух различных значений, времени в виде секунд с начала Эпохи и числа микросекунд в текущей секунде. Эти функции описаны далее в разделе 14.3.1 «Время в микросекундах:».

 

Получение текущего времени: и

 

Системный вызов получает текущие дату и время; вычисляет разницу между двумя значениями:

 

 

 возвращает текущее время. Если параметр не равен, переменная, на которую указывает, также заполняется значением текущего времени. Функция возвращает, если была ошибка, устанавливая.

Хотя ISO С не указывает, чем является значение, POSIX определяет, что оно представляет время в секундах. Поэтому это предположение является обычным и переносимым. Например, чтобы посмотреть, что значение времени представляет отметку в прошлом шесть месяцев назад или позже, можно использовать код, подобный этому:

 

Однако, поскольку переносимый код может потребоваться запустить на не‑POSIX системах, существует функция для вычисления разницы между двумя значениями времени. Тот же самый тест с использованием можно было бы написать таким способом:

 

 

Возвращаемым типом является, поскольку может также содержать доли секунд. На системах POSIX он всегда представляет целые секунды.

В обоих предыдущих примерах обратите внимание на использование типизированных констант, чтобы форсировать выполнение вычислений с нужным математическим типом: в первом случае для целых, 6.0 во втором случае для чисел с плавающей точкой

 

Разложение времени: и

 

На практике форма представления даты и времени в виде «секунд с начала эпохи» не является очень удобной, кроме очень простых сравнений. Самостоятельное вычисление компонентов времени, таких, как месяц, день, год и т.д., подвержено ошибкам, поскольку необходимо принять во внимание местный часовой пояс (возможно, с учетом перехода на летнее время), правильно вычислить високосные годы и пр. К счастью, две стандартные процедуры делают за вас эту работу:

 

 

 возвращает указатель на, которая представляет время UTC. возвращает указатель на, представляющий местное время, т.е. в расчет берутся текущий часовой пояс и переход на летнее время. На самом деле это «время для настенных часов», дата и время, которые были бы отображены на настенных или ручных часах. (Как это работает, обсуждается далее в разделе 6.1.5 «Получение сведений о часовом поясе».)

Обе функции возвращают указатель на, которая выглядит следующим образом:

 

 называют разложенным временем (broken‑down time), поскольку значение «разложено» на свои составные части. Составные части, их диапазоны и значения показаны в табл. 6.1.

 

Таблица 6.1. Поля структуры

 

 Член Диапазон Значение
  0–60 Секунда минуты. Секунда 60 предусматривает пропущенные (leap) секунды. (В C89 был диапазон 0–61.)
  0–59 Минута часа.
  0–23 Час дня
  1–31 День месяца
  0–11 Месяц года
  0– N Год, начиная с 1900 г.
  0–6 День недели, воскресенье = 0
  0–365 День года, 1 января = 0.
  <0, 0, >0 Флаг летнего времени.

Стандарт ISO С представляет большинство этих значений как «после». Например, является числом «секунд после минуты», «месяцев после января», «дней недели после воскресенья» и т.д. Это помогает понять, почему все значения начинаются с 0. (Единственным исключением, достаточно логичным, является, день месяца, имеющий диапазон 1–31.) Конечно, отсчет их с нуля также практичен; поскольку массивы С отсчитываются с нуля, использование этих значений в качестве индексов тривиально:

 

Как, так и возвращают указатель на. Указатель указывает на static, содержащуюся в каждой процедуре, и похоже, что эти структуры переписываются каждый раз, когда вызываются процедуры. Поэтому хорошая мысль сделать копию возвращенной. Возвращаясь к предыдущему примеру.

 

Поле указывает, действует ли в настоящий момент летнее время (DST) Значение 0 означает, что DST не действует, положительное значение означает, что действует, а отрицательное значение – что информация о DST недоступна. (Стандарт С намеренно неконкретен, указывая лишь нулевое, положительное и отрицательное значения; это дает возможность большей свободы при реализации.)

 


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.