Linux программирование в примерах
Шрифт:
if (/* показать все файлы независимо от их имени (-а) */
OR /* первый символ имени не точка */
OR (/* показать файлы с точкой (-А) */
AND /* в имени файла несколько символов */
AND (/* второй символ не точка */
OR /* третий символ не завершает имя */)))
return TRUE;
ЗАМЕЧАНИЕ.
fnmatch
12.7.2. Раскрытие имени файла:
glob
и globfree
Функции
glob
и globfree
более разработанные, чем fnmatch
:
#include <glob.h> /* POSIX */
int glob(const char *pattern, int flags,
int (*errfunc)(const char *epath, int eerrno), glob_t *pglob);
void globfree(glob_t *pglob);
Функция
glob
осуществляет просмотр каталога и сопоставление с шаблонами, возвращая список всех путей, соответствующих pattern
. Символы подстановки могут быть включены в нескольких местах пути, а не только в качестве последнего компонента (например, '/usr/*/*.so
'). Аргументы следующие:
const char *pattern
Шаблон для раскрывания.
int flags
Флаги, управляющие поведением
glob
, вскоре будут описаны.
int (*errfunc)(const char *epath, int eerrno)
Указатель на функцию для использования при сообщениях об ошибках. Это значение может равняться
NULL
. Если нет и если (*errfunc)
возвращает ненулевое значение или в flags
установлен GLOB_ERR
, glob
прекращает обработку. Аргументами (*errfunc)
являются путь, вызвавший проблему, и значение errno, установленное функциями opendir
, readdir
или stat
.
glob_t *pglob
Указатель на структуру
glob_t
, использующуюся для хранения результатов. Структура glob_t
содержит список путей, которые выдает glob
:
typedef struct { /* POSIX */
size_t gl_pathc; /* Число найденных подходящих путей */
char **gl_pathv; /* Список подходящих путей */
size_t gl_offs; /* Слоты для резервирования в gl_pathv */
} glob_t;
size_t gl_pathc
Число путей, которые подошли.
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
.
Поделиться:
Популярные книги
Газлайтер. Том 4
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Сумеречный стрелок 8
8. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIX
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 3
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Санек
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Довлатов. Сонный лекарь 3
3. Не вывожу
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кремлевские звезды
6. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Назад в ссср 6
6. Курсант
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Ваше Сиятельство 7
7. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Особое назначение
2. Гарем вне закона
Фантастика:
фэнтези
6.89
рейтинг книги
Инферно
2. Легенда
Фантастика:
фэнтези
8.57
рейтинг книги
Охотник за головами
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Назад в СССР: 1985 Книга 2
2. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
6.00