Файловое время в микросекундах: — КиберПедия 

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Файловое время в микросекундах:

2021-01-29 73
Файловое время в микросекундах: 0.00 из 5.00 0 оценок
Заказать работу

 

В разделе 5.5.3 «Изменение временных отметок:» был описан системный вызов для установки времени последнего обращения и изменения данного файла. Некоторые файловые системы хранят эти временные отметки с разрешением в микросекунды (или еще точнее). Такие системы предусматривают системный вызов (обратите внимание на завершающую s в названии) для установки времени обращения к файлу и его изменения с точностью до микросекунд:

 

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

POSIX обозначает ее как «традиционную» функцию, что означает, что она стандартизуется лишь для поддержки старого кода и не должна использоваться для новых приложений. Главная причина, пожалуй, в том, что нет определенного интерфейса для получения времени доступа и изменения файла в микросекундах; содержит лишь значения, а не значения.

Однако, как упоминалось в разделе 5.4.3 «Только Linux: указание файлового времени повышенной точности», Linux 2.6 (и более поздние версии) действительно предоставляет доступ к временным отметкам с разрешением в наносекунды при помощи функции. Некоторые другие системы (такие, как Solaris) также это делают.[157] Таким образом, полезнее, чем кажется на первый взгляд, и несмотря на ее «традиционный» статус, нет причин не использовать ее в своих программах.

 

Интервальные таймеры: и

 

Функция (см. раздел 10.8.1 «Сигнальные часы:, и») организует отправку сигнала после истечения данного числа секунд. Ее предельным разрешением является одна секунда. Здесь также BSD 4.2 ввело функцию и три различных таймера, которые используют время в долях секунды.

Интервальный таймер подобен многократно использующимся сигнальным часам. Вы устанавливаете начальное время, когда он должен «сработать», а также как часто это должно впоследствии повторяться. Оба этих значения используют объекты; т.е. они (потенциально) имеют разрешение в микросекундах. Таймер «срабатывает», доставляя сигнал; таким образом, нужно установить для таймера обработчик сигнала, желательно до установки самого таймера.

Существуют три различных таймера, описанных в табл. 14.2.

 

Таблица 14.2. Интервальные таймеры

 

 Таймер Сигнал Функция
    Работает в реальном режиме
    Работает, когда процесс выполняется в режиме пользователя
    Работает, когда процесс выполняется в режиме пользователя или ядра.

Использование первого таймера,, просто. Таймер работает в реальном времени, посылая по истечении заданного количества времени. (Поскольку посылается, нельзя смешивать вызовы с вызовами, а смешивание их с вызовом также опасно; см. раздел 10.8.1 «Сигнальные часы,, и».)

Второй таймер,, также довольно прост. Он действует, когда процесс исполняется, но лишь при выполнении кода пользователя (приложения) Если процесс заблокирован во время ввода/вывода, например, на диск, или, еще важнее, на терминал, таймер приостанавливается.

Третий таймер,, более специализированный. Он действует все время, пока выполняется процесс, даже если операционная система делает что‑нибудь для процесса (вроде ввода/вывода). В соответствии со стандартом POSIX, он «предназначен для использования интерпретаторами при статистическом профилировании выполнения интерпретируемых программ». Установив как для, так и для идентичные интервалы и сравнивая разницу времени срабатывания двух таймеров, интерпретатор может узнать, сколько времени проводится в системных вызовах для выполняющейся интерпретируемой программы[158]. (Как сказано, это довольно специализировано.) Двумя системными вызовами являются:

 

Аргумент является одной из перечисленных ранее именованных констант, указывающих таймер, заполняет, на которую указывает, текущими установками данного таймера, устанавливает для данного таймера значение в. Если имеется, функция заполняет ее текущим значением таймера. Используйте для, если не хотите беспокоиться о текущем значении. Обе функции возвращают в случае успеха 0 и ‑1 при ошибке, состоит из двух членов:

 

 

Прикладным программам не следует ожидать, что таймеры будут с точностью до микросекунд. Справочная страница getitimer (2) дает следующее объяснение:

 

Таймеры никогда не срабатывают раньше заданного времени, вместо этого срабатывая спустя небольшой постоянный интервал времени, зависящий от разрешения системного таймера (в настоящее время 10 мс). После срабатывания будет сгенерирован сигнал, а таймер будет сброшен. Если таймер срабатывает, когда процесс выполняется (для таймера это всегда верно), сигнал будет доставлен немедленно после создания. В противном случае, доставка будет сдвинута на небольшой промежуток времени, зависящий от загрузки системы.

 

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

 

Строки 10–18 представляют обработчик сигнала для; вызов гарантирует, что обработчик сигнала был установлен соответствующим образом. Тело обработчика выводит сообщение и выходит, но оно может делать что‑нибудь более подходящее для крупномасштабной программы.

В функции строки 27–28 очищают два члена структуры. Затем строка 30 устанавливает тайм‑аут в 10 секунд. Установка в 0 означает, что нет повторяющегося сигнала; он срабатывает лишь однажды. Строка 32 устанавливает обработчик сигнала, а строка 34 выводит приглашение.

Строка 36 устанавливает таймер, а строки 37–42 выводят соответствующие сообщения, основываясь на действиях пользователя. Реальная программа выполняла бы в этот момент свою задачу. Важно здесь обратить внимание на строку 38, которая отменяет таймер, поскольку были введены действительные данные.

 

ЗАМЕЧАНИЕ. Между строками 37 и 38 имеется намеренное состояние гонки. Все дело в том, что если пользователь не вводит строку в течение отведенного таймером времени, будет доставлен сигнал, и обработчик сигнала выведет сообщение «you lose».

 

Вот три успешных запуска программы:

ch14‑timers

 

 

ch14‑timers

 


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

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

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

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



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

0.008 с.