glob

Autres langues

Langue: pl

Autres versions - même langue

Version: 1999-09-12 (openSuse - 09/10/07)

Autres sections - même nom

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.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)