basename

Autres langues

Langue: pl

Autres versions - même langue

Version: 2000-12-14 (openSuse - 09/10/07)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

NAZWA

dirname, basename - wydzielenie sk³adników nazwy ¶cie¿ki dostêpu

SK£ADNIA


#include <libgen.h>



char *dirname(char *path);

char *basename(char *path);

OPIS

Funkcje dirname i basename rozbijaj± zakoñczony znakiem null ³añcuch nazwy ¶cie¿ki dostêpu na sk³adowe: katalog i nazwê pliku. W typowym przypadku dirname zwraca ³añcuch a¿ do ostatniego znaku '/', ale z jego wy³±czeniem, a basename zwraca sk³adow± nastêpuj±c± po ostatnim '/'. Koñcowe znaki '/' nie s± uwa¿ane za czê¶æ nazwy ¶cie¿ki dostêpu.

Je¶li path nie zawiera uko¶nika, dirname zwraca ³añcuch ".", podczas gdy basename zwraca kopiê path. Je¶li path jest ³añcuchem "/", wówczas zarówno dirname jak i basename zwracaj± ³añcuch "/". Je¶li path jest wska¼nikiem NULL lub wskazuje na pusty ³añcuch znaków, to zarówno dirname jak i basename zwracaj± ³añcuch ".".

Po³±czenie ³añcucha zwróconego przez dirname, "/" i ³añcucha zwróconego przez basename daje pe³n± nazwê ¶cie¿ki dostêpu.

Zarówno dirname jak i basename mog± modyfikowaæ zawarto¶æ path, wiêc je¿eli chce siê zachowaæ ³añcuch ¶cie¿ki dostêpu, to nale¿y przekazywaæ do tych funkcji jego kopiê. Ponadto dirname i basename mog± zwracaæ wska¼niki do pamiêci przydzielonej statycznie, która mo¿e byæ nadpisana nastêpnymi wywo³aniami.

Poni¿sza lista przyk³adów (wziêta z SUSv2) pokazuje ³añcuchy znaków zwracane przez dirname i basename dla ró¿nych ¶cie¿ek:


¶cie¿ka         dirname         basename

"/usr/lib"      "/usr"          "lib"

"/usr/"         "/"             "usr"

"usr"           "."             "usr"

"/"             "/"             "/"

"."             "."             "."

".."            "."             ".."

PRZYK£AD


char *dirc, *basec, *bname, *dname;

char *path = "/etc/passwd";



dirc = strdup(path);

basec = strdup(path);

dname = dirname(dirc);

bname = basename(basec);

printf("dirname=%s, basename=%s\n", dname, bname);

free(dirc);

free(basec);

WARTO¦Æ ZWRACANA

Zarówno dirname jak i basename zwracaj± wska¼niki do zakoñczonych znakiem null ³añcuchów znaków.

B£ÊDY

W wersjach glibc a¿ do 2.2.1 w³±cznie, dirname nieprawid³owo obs³uguje nazwy ¶cie¿ek dostêpu z koñcowymi znakami '/', i generuje naruszenie segmentacji, gdy poda siê NULL jako argument.

ZGODNE Z

SUSv2

ZOBACZ TAK¯E

dirname(1), basename(1),