Простое сопоставление с шаблоном: — КиберПедия 

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Простое сопоставление с шаблоном:

2021-01-29 60
Простое сопоставление с шаблоном: 0.00 из 5.00 0 оценок
Заказать работу

 

Мы начинаем с функции («filename match» сопоставление имени файла»).

 

Эта функция сопоставляет с, который является обычным шаблоном групповых символов оболочки. Значение флагов (которое вскоре будет описано) изменяет поведение функции. Возвращаемое значение равно 0, если соответствует,, если не соответствует, и ненулевое значение, если возникла ошибка. К сожалению, POSIX не определяет каких‑либо специфических ошибок; соответственно, вы можете лишь сказать, что что‑то пошло не так, но не можете сказать, что.

Переменная является побитовым ИЛИ одного или более флагов, перечисленных в табл. 12.1.

 

Таблица 12.1. Значения флагов для

 

 Флаг Только GLIBC Значение
  Сопоставление с учетом регистра
  Синоним GNU для
  Флаг для внутреннего использования GLIBC; не используйте его в своих программах. Подробности см. в fnmatch (3)
    Обратный слеш является обычным символом, а не знаком перехода
    Слеш в должен соответствовать слешу в, он не может быть подставлен через, или ''
    Начальная точка в подходит, лишь если в также есть начальная точка. Точка должна быть первым символом в. Однако, если также установлен, точка, которая идет за слешем, также рассматривается как начальная

 работает со строками из любого источника; сопоставляемые строки не обязательно должны быть действительными именами файлов. Хотя на практике используется в коде, читающем каталог с помощью (см раздел 5.3.1 «Базовое чтение каталогов»):

 

 

GNU использует для реализации своей опции. Вы можете предоставить несколько игнорируемых шаблонов (с помощью нескольких опций). сопоставляет каждое имя файла со всеми шаблонами. Она делает это с помощью функции в:

 

 

Цикл в строках 2276–2278 сопоставляет имя файла со списком шаблонов для игнорируемых файлов. Если один из шаблонов подходит, файл не интересен и возвращает false (то есть 0).

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

показать все файлы независимо от их имени (‑а)

первый символ имени не точка

показать файлы с точкой (‑А)

в имени файла несколько символов

второй символ не точка

третий символ не завершает имя

 

 

ЗАМЕЧАНИЕ. может оказаться дорогостоящей функцией, если она используется в локали с многобайтным набором символов. Обсудим многобайтные наборы символов в разделе 13.4 «Можете произнести это для меня по буквам?»

 

 

Раскрытие имени файла: и

 

Функции и более разработанные, чем:

 

Функция осуществляет просмотр каталога и сопоставление с шаблонами, возвращая список всех путей, соответствующих. Символы подстановки могут быть включены в нескольких местах пути, а не только в качестве последнего компонента (например, ''). Аргументы следующие:

 

Шаблон для раскрывания.

 

Флаги, управляющие поведением, вскоре будут описаны.

 

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

 

Указатель на структуру, использующуюся для хранения результатов. Структура содержит список путей, которые выдает:

 

 

Число путей, которые подошли.

 

Массив подходящих путей. всегда равен.

 

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

В табл. 12.2 перечислены стандартные флаги для.

 

Таблица 12.2. Флаги для

 

 Флаг Значение
  Добавить результаты текущего вызова к предыдущим
  Зарезервировать места спереди в
  Добавлять символ / в конец каждого имени, которое обозначает каталог
  Если шаблон не соответствует имени какого‑нибудь файла, вернуть его без изменений
  Рассматривать обратный слеш как обычный символ. Это делает невозможным обозначать метасимволы подстановок
  Не сортировать результаты, по умолчанию они сортируются

GLIBC версия структуры содержит дополнительные члены:

 

 

Члены структуры следующие:

 

Копия флагов. Включает также, если включал какие‑либо метасимволы.

 

Указатель на альтернативную версию.

 

Указатель на альтернативную версию.

 

Указатель на альтернативную версию.

 

Указатель на альтернативную версию.

 

Указатель на альтернативную версию.

Указатели на альтернативные версии стандартных функций предназначены главным образом для использования в реализации GLIBC; крайне маловероятно, что вы когда‑нибудь их используете. Поскольку GLIBC предусматривает поле и дополнительные значения флагов, справочная страница и руководство Info документируют оставшуюся часть структуры GLIBC. В табл. 12.3 перечислены дополнительные флаги.

 

Таблица 12.3. Дополнительные флаги GLIBC для

 

 Флаг Значение
  Использовать для доступа к каталогам альтернативные функции (см. текст)
  Выполнить раскрытие фигурных скобок в стиле и Bash.
  Вставить, если были найдены метасимволы.
  Вернуть шаблон, если он не содержит метасимволов
  По возможности сопоставлять лишь каталоги. См. текст.
  Разрешить соответствие метасимволов наподобие и начальной точке
  Выполнить раскрывание тильды в стиле оболочки.
  Подобно, но если есть проблемы с указанным домашним каталогом, вернуть вместо помещения в список.

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

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

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

 возвращает 0, если не было проблем, или одно из значений из табл. 12.4, если были.

 

Таблица 12.4. Возвращаемые значения

 

 Флаг Значение
  Просмотр остановлен раньше времени, поскольку был установлен или функция возвратила ненулевой результат
  Ни одно имя файла не соответствовало, а флаг не был установлен
  Была проблема с выделением динамической памяти

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

 

 

Строка 7 определяет, которая указывает на имя программы; эта переменная для сообщений об ошибках от, определенной в строках 11–15.

Строки 33–45 являются основой программы. Они перебирают в цикле шаблоны, приведенные в командной строке, вызывая для каждого для добавления к списку результатов. Большую часть цикла составляет обработка ошибок (строки 36–44). Строки 47–48 выводят результирующий список, а строки 50–51 проводят завершающую очистку и возвращаются.

Строки 39–41 не являются хорошими; нужно было использовать отдельную функцию, преобразующую целые константы в строки; мы сделали это главным образом ради экономии места. Код наподобие этого может быть сносным для небольших программ, но более крупные должны использовать функцию.

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

ch12‑glob '/usr/lib/x*.so' '../../*.texi'

 

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

 

 


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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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

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



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

0.03 с.