basename

Autres langues

Langue: pl

Autres versions - même langue

Version: 2000-12-14 (fedora - 25/11/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),