Linux программирование в примерах
char **gl_pathvМассив подходящих путей.
всегда равенgl_pathv[gl_pathc].NULLsize_t gl_offs«Зарезервированные слоты» в
. Идея заключается в резервировании слотов спереди отgl_pathvдля заполнения их приложением впоследствии, как в случае с именем команды и опциями. Список затем может быть передан непосредственноgl_pathvилиexecv()(см. раздел 9.1.4 «Запуск новой программы: семействоexecvp()»). Зарезервированные слоты устанавливаются вexec(). Чтобы все это работало, вNULLдолжен быть установленflags.GLOB_DOOFFSВ табл. 12.2 перечислены стандартные флаги для
.glob()Таблица 12.2. Флаги для
glob()
Флаг Значение GLOB_APPENDДобавить результаты текущего вызова к предыдущим GLOB_DOOFFSЗарезервировать места спереди вgl_offsgl_pathvGLOB_MARKДобавлять символ / в конец каждого имени, которое обозначает каталог GLOB_NOCHECKЕсли шаблон не соответствует имени какого-нибудь файла, вернуть его без изменений GLOB_NOESCAPEРассматривать обратный слеш как обычный символ. Это делает невозможным обозначать метасимволы подстановок GLOB_NOSORTНе сортировать результаты, по умолчанию они сортируются GLIBC версия структуры
содержит дополнительные члены:glob_ttypedef 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включал какие-либо метасимволы.patternvoid (*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 предусматривает поле
и дополнительные значения флагов, справочная страница и руководство Info документируют оставшуюся часть структуры GLIBCgl_flags. В табл. 12.3 перечислены дополнительные флаги.glob_tТаблица 12.3. Дополнительные флаги GLIBC для
glob()
Флаг Значение GLOB_ALTDIRFUNCИспользовать для доступа к каталогам альтернативные функции (см. текст) GLOB_BRACEВыполнить раскрытие фигурных скобок в стиле и Bash.cshGLOB_MAGCHARВставить , если были найдены метасимволы.gl_flagsGLOB_NOMAGICВернуть шаблон, если он не содержит метасимволов GLOB_ONLYDIRПо возможности сопоставлять лишь каталоги. См. текст. GLOB_PERIODРазрешить соответствие метасимволов наподобие и*начальной точке?GLOB_TILDEВыполнить раскрывание тильды в стиле оболочки. GLOB_TILDE_CHECKПодобно , но если есть проблемы с указанным домашним каталогом, вернутьGLOB_TILDEвместо помещенияGLOB_NOMATCHв список.patternФлаг
действует в качестве подсказки реализации, потому что вызывающий интересуется лишь каталогами. Главным его предназначением является использование другими функциями в GLIBC, а вызывающий по-прежнему должен быть готов обрабатывать файлы, не являющиеся каталогами. Вам не следует использовать этот флаг в своих программах.GLOB_ONLYDIR