NAZWA
glob, globfree - znalezienie ścieżek odpowiadających wzorcowi, zwolnienie pamięć z glob()BIBLIOTEKA
Standardowa biblioteka C ( libc, -lc)SKŁADNIA
#include <glob.h>
int glob(const char *restrict pattern, int flags, int (*errfunc)(const char *epath, int eerrno), glob_t *restrict pglob); void globfree(glob_t *pglob);
OPIS
Funkcja glob() przeszukuje wszystkie ścieżki odpowiadające wzorcowi pattern, stosując przy tym reguły takie, jakich użyłaby powłoka (zobacz glob(7)). Nie jest dokonywane rozwinięcie tyldy ani podstawienie parametrów. Jeśli są one potrzebne, to należy użyć wordexp(3). Funkcja globfree() zwalnia obszar pamięci zaalokowany dynamicznie przez wcześniejsze wywołanie funkcji glob(). W wyniku wywołania glob() tworzona jest struktura, na którą wskazuje pglob. Struktura jest typu glob_t (deklarowany w <glob.h>) i zawiera następujące elementy zdefiniowane przez POSIX.2 (mogą też występować dodatkowe jako rozszerzenie):typedef struct { size_t gl_pathc; /* Liczba odpowiadających dotąd ścieżek. */ char **gl_pathv; /* Lista odpowiadających ścieżek */ size_t gl_offs; /* Sloty do rezerwowania w gl_pathv. */ } glob_t;
Wyniki są zachowywane w dynamicznie przydzielanym obszarze pamięci. Argument flags jest bitowym OR-em zera lub więcej następujących symboli stałych modyfikujących zachowanie glob():
- GLOB_ERR
- Powraca po napotkaniu błędu odczytu (na przykład, jeśli nie ma praw do odczytu katalogu). Domyślnie glob() kontynuuje działanie mimo błędów, odczytując wszystkie katalogi, do których ma uprawnienia.
- GLOB_MARK
- Dodaje ukośnik do każdej ścieżki, która odpowiada katalogowi.
- GLOB_NOSORT
- Nie sortuje zwracanych nazw ścieżek. Jedynym powodem użycia tej opcji może być zaoszczędzenie czasu przetwarzania. Domyślnie zwracane nazwy ścieżek są sortowane.
- GLOB_DOOFFS
- Rezerwuje sloty pglob->gl_offs na początku listy napisów w pglob->pathv. Zarezerwowane sloty mogą zawierać wskaźniki null.
- GLOB_NOCHECK
- Jeśli żaden wzorzec nie zostanie dopasowany, to zwracany jest oryginalny wzorzec. Domyślnie glob() w razie braku dopasowań zwraca GLOB_NOMATCH.
- GLOB_APPEND
- Doklejać wyniki bieżącego wywołania do listy wyników poprzedniego wywołania. Nie należy ustawiać tej flagi przy pierwszym wywołaniu glob().
- GLOB_NOESCAPE
- Don't allow backslash ('\') to be used as an escape character. Normally, a backslash can be used to quote the following character, providing a mechanism to turn off the special meaning metacharacters.
- GLOB_PERIOD
- Pozwala na to, by początkowa kropka była dopasowywana przez metaznaki. Domyślnie metaznaki nie są dopasowywane do początkowej kropki.
- GLOB_ALTDIRFUNC
- Zamiast zwykłych funkcji bibliotecznych używa alternatywnych funkcji pglob->gl_closedir, pglob->gl_readdir, pglob->gl_opendir, pglob->gl_lstat oraz pglob->gl_stat do dostępu do systemu plików.
- GLOB_BRACE
- Rozwija wyrażenia nawiasowe stylu csh(1) w formacie {a,b}. Wyrażenia nawiasowe mogą być zagnieżdżane. Dlatego na przykład podanie wzoraca "{foo/{,cat,dog},bar}" zwróci takie same wyniki jak czterokrotne wywołanie glob() z następującymi argumentami: "foo/", "foo/cat", "foo/dog" oraz "bar".
- GLOB_NOMAGIC
- Jeśli wzorzec nie zawiera metaznaków, to powinien być zwrócony jako jedyne pasujące słowo nawet wtedy, gdy nie ma plików o takiej nazwie.
- GLOB_TILDE
- Carry out tilde expansion. If a tilde ('~') is the only character in the pattern, or an initial tilde is followed immediately by a slash ('/'), then the home directory of the caller is substituted for the tilde. If an initial tilde is followed by a username (e.g., "~andrea/bin"), then the tilde and username are substituted by the home directory of that user. If the username is invalid, or the home directory cannot be determined, then no substitution is performed.
- GLOB_TILDE_CHECK
- Zachowuje się podobnie do GLOB_TILDE, z tą różnicą że jeśli nazwa użytkownika jest niepoprawna lub jeśli nie można określić katalogu domowego użytkownika, to glob() zamiast używać wzorca jako nazwy zwróci GLOB_NOMATCH, wskazując, że wystąpił błąd.
- GLOB_ONLYDIR
- Jest to wskazówka dla funkcji glob(), mówiąca, że funkcja wywołująca jest zainteresowana tylko katalogami pasującymi do wzorca. Jeśli implementacja może w łatwy sposób określić informację o typie pliku, to pliki niebędące katalogami nie są zwracane. Jednakże funkcja wywołująca musi sprawdzić, że zwrócone pliki są katalogami. (Celem tej flagi jest poprawienie wydajności w przypadku, gdy funkcja wywołująca jest zainteresowana tylko katalogami).
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu glob() zwraca zero. Inne możliwe wartości to:- GLOB_NOSPACE
- przy braku pamięci,
- GLOB_ABORTED
- przy błędzie odczytu i
- GLOB_NOMATCH
- gdy niczego nie dopasowano.
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).Interfejs | Atrybut | Wartość |
glob() | Bezpieczeństwo wątkowe | MT-Unsafe race:utent env sig:ALRM timer locale |
globfree() | Bezpieczeństwo wątkowe | MT-Safe |
STANDARDY
POSIX.1-2001, POSIX.1-2008, POSIX.2.UWAGI
Elementy gl_pathc i gl_offs struktury są w glibc 2.1 zadeklarowane jako size_t, jak powinno być zgodnie z POSIX.2, ale są zadeklarowane jako int w glibc 2.0.BŁĘDY
Funkcja glob() może zawieść z powodu błędu wywołanych przez nią funkcji, takich jak malloc(3) czy opendir(3). Wywołania te zapiszą kod błędu w errno.PRZYKŁADY
Jednym z przykładów użycia jest następujący kod, emulujący wpisaniels -l *.c ../*.c
w powłoce:
glob_t globbuf; globbuf.gl_offs = 2; glob("*.c", GLOB_DOOFFS, NULL, &globbuf); glob("../*.c", GLOB_DOOFFS | GLOB_APPEND, NULL, &globbuf); globbuf.gl_pathv[0] = "ls"; globbuf.gl_pathv[1] = "-l"; execvp("ls", &globbuf.gl_pathv[0]);
ZOBACZ TAKŻE
ls(1), sh(1), stat(2), exec(3), fnmatch(3), malloc(3), opendir(3), readdir(3), wordexp(3), glob(7)TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <[email protected]>, Andrzej Krzysztofowicz <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej [email protected]5 lutego 2023 r. | Linux man-pages 6.03 |