Provided by: manpages-pl-dev_0.7-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

       Informacje   o   pojęciach   używanych   w  tym  rozdziale  można  znaleźć  w  podręczniku
       attributes(7).

       ┌──────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────────────────┼────────────────────────┼─────────┤
       │basename(), dirname() │ Bezpieczeństwo wątkowe │ MT-Safe │
       └──────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008.

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  4.07  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://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ą   4.07
       oryginału.