Linux программирование в примерах
Шрифт:
Строки 39–41 не являются хорошими; нужно было использовать отдельную функцию, преобразующую целые константы в строки; мы сделали это главным образом ради экономии места. Код наподобие этого может быть сносным для небольших программ, но более крупные должны использовать функцию.
Если вы подумаете о работе, происходящей под капотом (открытие и чтение каталогов, сопоставление шаблонов, динамическое выделение памяти для увеличения списка, сортировка списка), можете качать ценить, как много для вас делает
Обратите внимание, что нам пришлось взять аргументы в кавычки, чтобы предотвратить их разворачивание оболочкой!
В былые времена, около V6 Unix, для осуществления разворачивания символов подстановки оболочка использовала за кулисами отдельную программу. Эта программа называлась
Таким образом глагол «to glob» проник в лексикон Unix со значением «осуществлять разворачивание символов подстановки». Это, в свою очередь, дает нам имена функций
130
См
12.7.3. Разворачивание слов оболочкой:
Многие члены комитета POSIX чувствовали, что
Эти функции работают сходным с
Члены структуры полностью аналогичны описанным ранее для
Как и для
Таблица 12.5. Флаги для
| Константа | Значение |
|---|---|
| WRDE_APPEND | Добавить результаты текущего вызова к предыдущим |
| WRDE_DOOFFS | Зарезервировать we_offs мест в начале we_wordv |
| WRDE_NOCMD | Запретить подстановку команд |
| WRDE_REUSE | Повторно использовать память, на которую указывает we_wordv |
| WRDE_SHOWERR | Не молчать при возникновении во время разворачивания ошибок |
| WRDE_UNDEF | Неопределенные переменные оболочки должны вызывать ошибку |
Возвращаемое значение равно 0, если все прошло хорошо, или одно из значений из табл. 12.6, если нет.
Таблица 12.6. Возвращаемые значения ошибок для
| Константа | Значение |
|---|---|
| WRDE_BADCHAR | Метасимвол (конец строки, '|', &, ;, <, >, (, ), {, или }) в недопустимом месте |
| WRDE_BADVAL | Переменная не определена при установленном WRDE_UNDEF |
| WRDE_CMDSUB | Попытка подстановки команды при установленном WRDE_NOCMD |
| WRDE_NOSPACE | Была проблема с выделением динамической памяти |
| WRDE_SYNTAX | Синтаксическая ошибка оболочки. |
Мы оставляем вам в качестве упражнения (см. далее) модификацию
12.8. Регулярные выражения
Регулярные выражения являются способом описания текстовых шаблонов для сопоставления. Если вы вообще сколько-нибудь использовали GNU/Linux или Unix, вы без сомнения знакомы с регулярными выражениями: они являются фундаментальной частью инструментария программиста Unix. Они неотъемлемы от таких повседневных программ, как
POSIX определяет два вида регулярных выражений: базовый и расширенный. Программы типа
Брак по-драконьи
Фантастика:
фэнтези
рейтинг книги
Черный рынок
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
рейтинг книги
Вперед в прошлое 3
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Хозяин Стужи 3
3. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Черный Маг Императора 17
17. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Император Пограничья 1
1. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Я снова князь. Книга XXIII
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Рассвет русского царства
1. Новая Русь
Документальная литература:
историческая литература
рейтинг книги
Последний Паладин. Том 8
8. Путь Паладина
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Камень. Книга шестая
6. Камень
Фантастика:
боевая фантастика
рейтинг книги
Я - истребитель
1. Я - истребитель
Фантастика:
альтернативная история
рейтинг книги