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, а вызывающий по-прежнему должен быть готов обрабатывать файлы, не являющиеся каталогами. Вам не следует использовать этот флаг в своих программах.