Rechercher une page de manuel
glob
Langue: pl
Version: 1999-09-12 (openSuse - 09/10/07)
Section: 3 (Bibliothèques de fonctions)
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
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.2B£Ê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)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre