Только Linux: указание файлового времени повышенной точности — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

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

Только Linux: указание файлового времени повышенной точности

2021-01-29 96
Только Linux: указание файлового времени повышенной точности 0.00 из 5.00 0 оценок
Заказать работу

 

Ядра Linux 2.6 и более поздние предоставляют в три дополнительных поля. Они предусматривают точность файлового времени до наносекунд:

Наносекундная компонента времени доступа к файлу.

Наносекундная компонента времени изменения файла

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

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

 

Определение типа файла

 

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

 

 

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

 

Возвращает, если является обычным файлом.

 

Возвращает, если является каталогом.

 

Возвращает, если является символьным устройством. Устройства вскоре будут обсуждены более подробно.

 

Возвращает, если является блочным устройством.

 

Возвращает, если является FIFO.

 

Возвращает, если является символической ссылкой. (Это может никогда не вернуть, если вместо использовались или.)

 

Возвращает, если является сокетом.

 

ЗАМЕЧАНИЕ. В GNU/Linux эти макросы возвращают 1 для и 0 для. Однако, на других системах возможно, что они будут возвращать для вместо 1 произвольное неотрицательное число. (POSIX определяет лишь ненулевое значение в противоположность нулевому). Поэтому всегда следует использовать эти макросы как автономные тесты вместо проверки возвращаемого значения.

 

Наряду с макросами предоставляет два набора битовых масок. Один набор для проверки прав доступа, а другой ‑ для проверки типа файла. Мы видели маски прав доступа в разделе 4.6 «Создание файлов», когда обсуждали тип и значения для и. Битовые маски, их числовые значения для GNU/Linux и смысл приведены в табл. 5.2.

 

Таблица 5.2. Битовые маски POSIX для типов файлов и прав доступа в

 

 Маска Значение Комментарий
  0170000 Маска для битовых полей типа файла
  0140000 Сокет.
  0120000 Символическая ссылка
  0100000 Обычный файл.
  0060000 Блочное устройство.
  0040000 Каталог.
  0020000 Символьное устройство.
  0010000 FIFO.
  0004000 Бит setuid.
  0002000 Бит setgid
  0001000 «Липкий» (sticky) бит.
  0000700 Маска для прав доступа владельца.
  0000400 Доступ на чтение для владельца.
  0000200 Доступ на запись для владельца.
  0000100 Доступ на исполнение для владельца.
  0000070 Маска для прав доступа группы.
  0000040 Доступ на чтение для группы.
  0000020 Доступ на запись для группы.
  0000010 Доступ на исполнение для группы.
  0000007 Маска для прав доступа остальных.
  0000004 Доступ на чтение для остальных.
  0000002 Доступ на запись для остальных.
  0000001 Доступ на исполнение для остальных.

Некоторые из этих масок служат цели изолирования различных наборов битов, закодированных в поле:

• представляет биты 12–15, которыми закодированы различные типы файлов.

• представляет биты 6–8, являющиеся правами доступа владельца (на чтение, запись, исполнение для User).

• представляет биты 3–5, являющиеся правами доступа группы (на чтение, запись, исполнение для Group).

• представляет биты 0–2, являющиеся правами доступа для «остальных» (на чтение, запись, исполнение для Other).

Биты прав доступа и типа файла графически изображены на рис. 5.3.

Рис. 5.3. Биты прав доступа и типа файлов

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

Стандарт POSIX явным образом констатирует; что в будущем не будут стандартизированы новые битовые маски и что тесты для любых дополнительных разновидностей типов файлов, которые могут быть добавлены, будут доступны лишь в виде макросов xxx.

 

Сведения об устройстве

 

Стандарт POSIX не определяет значение типа, поскольку предполагалось его использование на не‑Unix системах также, как на Unix‑системах. Однако стоит знать, что находится в.

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

Традиционно файлы устройств Unix кодируют старший и младший номера устройства в значении. По старшему номеру различают тип устройства, такой, как «дисковый привод» или «ленточный привод». Старшие номера различают также разные типы устройств, такие, как диск SCSI в противоположность диску IDE. Младшие номера различают устройства данного типа, например, первый диск или второй. Вы можете увидеть эти значения с помощью '':

ls ‑l /dev/hda /dev/hda?

 

 

ls ‑l /dev/null

 

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

Обратите внимание, что дисковые устройства являются блочными устройствами, тогда как является символьным устройством. Блочные и символьные устройства являются отдельными сущностями; даже если символьное устройство и блочное устройство имеют один и тот же старший номер устройства, они необязательно связаны

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

 

 

(Некоторые системы реализуют их в виде макросов.)

Функция идет другим путем; она принимает отдельные значения старшего и младшего номеров и кодирует их в значении. В других отношениях ее использование выходит за рамки данной книги; патологически любопытные должны посмотреть mknod (2).

Следующая программа,, показывает, как использовать системный вызов, макросы проверки типа файла и, наконец, макросы и.

 

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

ch05‑devnum /tmp

 

ch05‑devnum /dev/null

 

ch05‑devnum /dev/hda2

 

К счастью, вывод согласуется с выводом, давая нам уверенность[59], что мы в самом деле написали правильный код.

Воспроизведение вывода ls замечательно и хорошо, но действительно ли это полезно? Ответ – да. Любое приложение, работающее с иерархиями файлов, должно быть способно различать различные типы файлов. Подумайте об архиваторе, таком как или. Было бы пагубно, если бы такая программа рассматривала файл дискового устройства как обычный файл, пытаясь прочесть его и сохранить его содержимое в архиве! Или подумайте о, которая может выполнять произвольные действия, основываясь на типе и других атрибутах файлов, с которыми она сталкивается, (является сложной программой; посмотрите find (1), если вы с ней не знакомы.) Или даже нечто простое, как пакет, оценивающий свободное дисковое пространство, тоже должно отличать обычные файлы от всего остального.

 

Возвращаясь к V7

 

В разделе 4.4.4 «Пример: Unix cat» мы обещали вернуться к программе V7, чтобы посмотреть, как она использует системный вызов. Первая группа строк, использовавшая ее, была такой:

 

 

Этот код теперь должен иметь смысл. В строке 31 вызывается для стандартного вывода, чтобы заполнить структуру. Строка 32 отбрасывает всю информацию в за исключением типа файла, используя логическое AND с маской. Строка 33 проверяет, что используемый для стандартного вывода файл не является файлом устройства. В таком случае программа сохраняет номера устройства и индекса в и. Эти значения затем проверяются для каждого входного файла в строках 50–56.

 

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

Проверка сделана безусловно, хотя и устанавливаются, лишь если вывод не является файлом устройства. Это срабатывает нормально из‑за того, как эти переменные объявлены:

 

Поскольку инициализирован значением (‑1), ни один действительный номер индекса не будет ему соответствовать[60]. То, что не инициализирован так, является небрежным, но не представляет проблемы, поскольку тест в строке 51 требует, чтобы были равными значения как устройства, так и индекса. (Хороший компилятор выдаст предупреждение, что используется без инициализации: '' сделает это.)

Обратите также внимание, что ни один вызов не проверяется на ошибки. Это также небрежность, хотя не такая большая, маловероятно, что завершится неудачей с действительным дескриптором файла

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

Tty

 

cat /dev/pts/3 > /dev/pts/3

This is a line of text

 


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

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

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

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



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

0.022 с.