Provided by: manpages-pl-dev_20060617-1_all bug

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