Категории
Самые читаемые
PochitayKnigi » Компьютеры и Интернет » Интернет » Linux программирование в примерах - Роббинс Арнольд

Linux программирование в примерах - Роббинс Арнольд

Читать онлайн Linux программирование в примерах - Роббинс Арнольд

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 176 177 178 179 180 181 182 183 184 ... 253
Перейти на страницу:

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

1 ... 176 177 178 179 180 181 182 183 184 ... 253
Перейти на страницу:
Тут вы можете бесплатно читать книгу Linux программирование в примерах - Роббинс Арнольд.
Комментарии