Флаг GLOB_ONLYDIR
glob()
GLOB_APPEND gl_offs, а если вы изменили какие-нибудь значения в gl_pathv или gl_pathc, нужно их восстановить перед последующим вызовом glob().Возможность многократного вызова glob()
glob()
Таблица 12.4
. Возвращаемыеglob() значения| Флаг | Значение |
|---|---|
GLOB_ABORTED | Просмотр остановлен раньше времени, поскольку был установлен GLOB_ERR или функция (*errfunc)() возвратила ненулевой результат |
GLOB_NOMATCH | Ни одно имя файла не соответствовало pattern, а флаг GLOB_NOCHECK не был установлен |
GLOB_NOSPACE | Была проблема с выделением динамической памяти |
globfree()
glob() Следующая программа, ch12-glob.с, демонстрирует glob():1 /* ch12-glob.c --- демонстрирует glob(). */
2
3 #include
4 #include
5 #include
6
7 char *myname;
8
9 /* globerr --- выводит сообщение об ошибке для glob() */
10
11 int globerr(const char *path, int eerrno)
12 {
13 fprintf(stderr, "%s: %s: %s\n", myname, path, strerror(eerrno));
14 return 0; /* let glob() keep going */
15 }
16
17 /* main() --- раскрывает символы подстановки в командной строке и выводит результаты */
18
19 int main(int argc, char **argv)
20 {
21 int i;
22 int flags = 0;
23 glob_t results;
24 int ret;
25
26 if (argc == 1) {
27 fprintf(stderr, "usage: %s wildcard ...\n", argv[0]);
28 exit(1);
29 }
30
31 myname = argv[0]; /* для globerr() */
32
33 for (i = 1; i < argc; i++) {
34 flags |= (i > 1 ? GLOB_APPEND : 0);
35 ret = glob(argv[i], flags, globerr, &results);
36 if (ret != 0) {
37 fprintf(stderr, "%s: problem with %s (%s),
38 stopping early\n", myname, argv[i],
39 /* опасно: */ (ret == GLOB_ABORTED ? "filesystem problem" :
40 ret == GLOB_NOMATCH ? "no match of pattern" :
41 ret == GLOB_NOSPACE ? "no dynamic memory" :
42 "unknown problem"));
43 break;
44 }
45 }
46
47 for (i = 0; i < results.gl_pathc; i++)
48 printf("%s\n", results.gl_pathv[i]);
49
50 globfree(&results);
51 return 0;
52 }
Строка 7 определяет myname
globerr(), определенной в строках 11–15.Строки 33–45 являются основой программы. Они перебирают в цикле шаблоны, приведенные в командной строке, вызывая для каждого glob()
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT