Linux программирование в примерах - Роббинс Арнольд
Шрифт:
Интервал:
Закладка:
char **gl_pathv
Массив подходящих путей. gl_pathv[gl_pathc] всегда равен NULL.
size_t gl_offs
«Зарезервированные слоты» в gl_pathv. Идея заключается в резервировании слотов спереди от gl_pathv для заполнения их приложением впоследствии, как в случае с именем команды и опциями. Список затем может быть передан непосредственно execv() или execvp() (см. раздел 9.1.4 «Запуск новой программы: семейство exec()»). Зарезервированные слоты устанавливаются в NULL. Чтобы все это работало, в flags должен быть установлен GLOB_DOOFFS.
В табл. 12.2 перечислены стандартные флаги для glob().
Таблица 12.2. Флаги для glob()
Флаг Значение GLOB_APPEND Добавить результаты текущего вызова к предыдущим GLOB_DOOFFS Зарезервировать места gl_offs спереди в gl_pathv GLOB_MARK Добавлять символ / в конец каждого имени, которое обозначает каталог GLOB_NOCHECK Если шаблон не соответствует имени какого-нибудь файла, вернуть его без изменений GLOB_NOESCAPE Рассматривать обратный слеш как обычный символ. Это делает невозможным обозначать метасимволы подстановок GLOB_NOSORT Не сортировать результаты, по умолчанию они сортируютсяGLIBC версия структуры glob_t содержит дополнительные члены:
typedef struct { /* GLIBC */
/* Компоненты POSIX: */
size_t gl_pathc; /* Число подходящих путей */
char **gl_pathv; /* Список подходящих путей */
size_t gl_offs; /* Резервируемые в gl_pathv слоты */
/* Компоненты GLIBC: */
int gl_flags; /* Копия флагов, дополнительные флаги GLIBC */
void (*gl_closedir)(DIR *); /* Частная версия closedir() */
struct dirent *(*gl_readdir)(DIR *); /* Частная версия readdir)) */
DIR *(*gl_opendir)(const char *); /* Частная версия opendir)) */
int (*gl_lstat)(const char *, struct stat *);
/* Частная версия lstat() */
int (*gl_stat)(const char *, struct stat *); /* Частная версия stat() */
} glob_t;
Члены структуры следующие:
int gl_flags
Копия флагов. Включает также GLOB_MAGCHAR, если pattern включал какие-либо метасимволы.
void (*gl_closedir)(DIR *)
Указатель на альтернативную версию closedir().
struct dirent *(*gl_readdir)(DIR *)
Указатель на альтернативную версию readdir().
DIR *(*gl_opendir)(const char *)
Указатель на альтернативную версию opendir().
int (*gl_lstat)(const char *, struct stat*)
Указатель на альтернативную версию lstat().
int (*gl_stat)(const char*, struct stat*)
Указатель на альтернативную версию stat().
Указатели на альтернативные версии стандартных функций предназначены главным образом для использования в реализации GLIBC; крайне маловероятно, что вы когда-нибудь их используете. Поскольку GLIBC предусматривает поле gl_flags и дополнительные значения флагов, справочная страница и руководство Info документируют оставшуюся часть структуры GLIBC glob_t. В табл. 12.3 перечислены дополнительные флаги.
Таблица 12.3. Дополнительные флаги GLIBC для glob()
Флаг Значение GLOB_ALTDIRFUNC Использовать для доступа к каталогам альтернативные функции (см. текст) GLOB_BRACE Выполнить раскрытие фигурных скобок в стиле csh и Bash. GLOB_MAGCHAR Вставить gl_flags, если были найдены метасимволы. GLOB_NOMAGIC Вернуть шаблон, если он не содержит метасимволов GLOB_ONLYDIR По возможности сопоставлять лишь каталоги. См. текст. GLOB_PERIOD Разрешить соответствие метасимволов наподобие * и ? начальной точке GLOB_TILDE Выполнить раскрывание тильды в стиле оболочки. GLOB_TILDE_CHECK Подобно GLOB_TILDE, но если есть проблемы с указанным домашним каталогом, вернуть GLOB_NOMATCH вместо помещения pattern в список.Флаг GLOB_ONLYDIR действует в качестве подсказки реализации, потому что вызывающий интересуется лишь каталогами. Главным его предназначением является использование другими функциями в GLIBC, а вызывающий по-прежнему должен быть готов обрабатывать файлы, не являющиеся каталогами. Вам не следует использовать этот флаг в своих программах.