NAZWA¶
glob, globfree - znalezienie ścieżek odpowiadających wzorcowi,
zwolnienie pamięć z glob()
SKŁADNIA¶
#include <glob.h>
int glob(const char *pattern, int flags,
int errfunc(const char *epath, int eerrno),
glob_t *pglob);
void globfree(glob_t *pglob);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
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, będący typu
glob_t
zadeklarowanego w
<glob.h> i zawierającego
następujące elementy zdefiniowane przez POSIX.2 (mogą też
występować dodatkowe, ale 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.
Parametr
flags tworzy bitowe OR zera lub więcej
następujących symboli stałych modyfikujących zachowanie
glob():
- GLOB_ERR
- oznacza, że należy powrócić po
błędzie odczytu (np. gdy katalog nie ma praw odczytu),
- GLOB_MARK
- oznacza dodawanie ukośnika do każdej
ścieżki, która odpowiada katalogowi,
- GLOB_NOSORT
- oznacza, że zwracane ścieżki nie mają
być sortowane (domyślnie są),
- GLOB_DOOFFS
- oznacza, że sloty pglob->gl_offs
będą rezerwowane na początku listy napisów w
pglob->pathv,
- GLOB_NOCHECK
- oznacza, że jeśli żaden wzorzec nie
odpowiada, zwracany jest wzorzec oryginalny,
- GLOB_APPEND
- oznacza, że należy doklejać wyniki do
wyników poprzedniego wywołania. Nie należy ustawiać
tej flagi przy pierwszym wywołaniu glob().
- GLOB_NOESCAPE
- oznacza, że metaznaki nie mogą być cytowane
odwrotnymi ukośnikami,
Parametr flags może również zawierać następujące
znaczniki, będące rozszerzeniami GNU nie definiowanymi przez
POSIX.2:
- GLOB_PERIOD
- oznacza, że początkowa kropka może być
dopasowana metaznakiem,
GLOB_ALTDIRFUNC oznacza, że przy dostępie do systemy
plików zamiast zwykłych funkcji bibliotecznych używane są
funkcje alternatywne
pglob->gl_closedir,
pglob->gl_readdir,
pglob->gl_opendir,
pglob->gl_lstati
pglob->gl_stat,
- GLOB_BRACE
- oznacza, że rozwijane są wyrażenia nawiasowe
{a,b} w stylu csh(1),
- GLOB_NOMAGIC
- oznacza, że wzorzec jest zwracany, gdy nie zawiera
metaznaków,
- GLOB_TILDE
- oznacza, że przeprowadzane rozwinięcie tyldy,
a
- GLOB_ONLYDIR
- oznacza, że dopasowywane są wyłącznie
katalogi.
Jeśli
errfunc nie jest równe
NULL, to w wypadku
błędu będzie ono wywołane z argumentami
epath,
czyli wskaźnikiem do ścieżki, na której coś się
nie powiodło i z
eerrno, przechowującym wartość
errno, zwróconą przez wywołanie do
opendir(),
readdir() lub
stat(). Jeśli
errfunc zwraca
wartość niezerową lub jeśli ustawiony jest znacznik
GLOB_ERR,
glob() zakończy działanie po wywołaniu
funkcji
errfunc.
Po pomyślnym zakończeniu,
pglob->gl_pathc zawiera
liczbę pasujących ścieżek, a
pglob->gl_pathv
wskaźnik do listy trafionych ścieżek. Pierwszy wskaźnik za
ostatnią ścieżką ma wartość
NULL.
Możliwe jest wywoływanie
glob() wielokrotnie. W takim wypadku,
należy w następnych wywołaniach ustawić w
flags
znacznik
GLOB_APPEND.
Jako rozszerzenie GNU,
pglob->gl_flags jest ustawiane jako
or
podanych znaczników i
GLOB_MAGCHAR, gdy występują
metaznaki.
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.
PRZYKŁADY¶
Jednym z przykładów użycia jest następujący kod,
emulujący wpisanie
ls -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]);
ZGODNE Z¶
POSIX.2
BŁĘDY¶
Funkcja
glob() może zawieść z powodu błędu
wywołanych przez nią funkcji, takich jak
malloc() czy
opendir(). Wywołania te zapiszą kod błędu w
errno.
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 libc4, libc5 i glibc 2.0.
ZOBACZ TAKŻE¶
ls(1),
sh(1),
stat(2),
exec(3),
malloc(3),
opendir(3),
readdir(3),
wordexp(3),
glob(7)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 3 glob
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.