Provided by: manpages-pl-dev_0.6-2_all bug

NAZWA

       basename, dirname - wydzielenie składników nazwy ścieżki

SKŁADNIA

       #include <libgen.h>

       char *dirname(char *path);

       char *basename(char *path);

OPIS

       Ostrzeżenie: istnieją dwie różne funkcje basename() — patrz niżej.

       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 "/", to 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()  z  "/"  i  łańcuchem  zwróconym  przez
       basename() daje pełną nazwę ścieżki dostępu.

       Zarówno  dirname(),  jak  i  basename()  mogą  zmienić  zawartość  path, tak więc może być
       potrzebne przekazanie kopii podczas wywoływania którejkolwiek z tych funkcji.

       Funkcje te mogą zwrócić wskaźniki do statycznie  alokowanej  pamięci,  która  może  zostać
       nadpisana  przez  kolejne  wywołania. Alternatywnie mogą zwrócić wskaźniki do części path,
       tak że łańcuch znaków wskazywany przez path nie powinien być ani zmieniany, ani usuwany aż
       do momentu, w którym wskaźnik zwrócony przez opisywane funkcje nie będzie już potrzebny.

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

WARTOŚĆ ZWRACANA

       Zarówno dirname(), jak i  basename()  zwracają  wskaźniki  do  zakończonych  znakiem  null
       łańcuchów znaków (nie należy tych wskaźników przekazywać do free(3)).

ATRYBUTY

   Wielowątkowość (patrz pthreads(7))
       Funkcje basename() i dirname() są wątkowo bezpieczne.

ZGODNE Z

       POSIX.1-2001.

UWAGI

       Istnieją  dwie  różne  wersji funkcji basename(): wersja POSIX opisana powyżej oraz wersja
       GNU, która jest dostępna po

           #define _GNU_SOURCE         /* Patrz feature_test_macros(7) */
       #include <string.h>

       Wersja GNU nigdy nie zmienia swojego argumentu oraz zwraca  pusty  łańcuch  znaków,  jeśli
       path  kończy  się  znakiem ukośnika, w szczególności gdy path jest równe "/". Nie istnieje
       wersja GNU funkcji dirname().

       W bibliotece GNU wersja POSIX funkcji basename() jest używana,  gdy  dołączony  jest  plik
       nagłówkowy <libgen.h>. W przeciwnym wypadku używana jest wersja GNU.

BŁĘDY IMPLEMENTACJI

       W  implementacji  biblioteki  glibc  POSIX-owych  wersji tych funkcji modyfikują one swoje
       argumenty i powodują błąd naruszenia ochrony  pamięci,  jeśli  są  wywołane  z  statycznym
       łańcuchem znaków takim jak "/usr". Do wersji 2.2.1 biblioteki glibc dirname() niepoprawnie
       obsługiwało nazwy ścieżek dostępu z końcowymi znakami "/"  i  generowało  błąd  naruszenia
       ochrony pamięci, gdy podało się się NULL jako argument.

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

ZOBACZ TAKŻE

       basename(1), dirname(1)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  3.71  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą  wersję  oryginału  można
       znaleźć pod adresem http://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika   man  są:  Andrzej
       Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda  <robert@debian.org>  i  Michał
       Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na
       stronie  http://sourceforge.net/projects/manpages-pl/.  Jest   zgodne   z   wersją    3.71
       oryginału.