Provided by: manpages-pl-dev_4.21.0-2_all bug

NAZWA

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

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

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.

       The  functions  dirname()   and  basename()   break  a null-terminated pathname string into directory and
       filename components.  In the usual case, dirname()  returns the string up  to,  but  not  including,  the
       final  '/',  and  basename()  returns the component following the final '/'.  Trailing '/' characters are
       not counted as part of the pathname.

       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 │
       └────────────────────────────────────────────────────────────────────┴────────────────────────┴─────────┘

STANDARDY

       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

       W implementacji biblioteki glibc POSIX-owych wersji tych funkcji modyfikują argument path i powodują błąd
       naruszenia ochrony pamięci, jeśli są wywołane z statycznym łańcuchem znaków takim jak "/usr/".

       Before  glibc 2.2.1, the glibc version of dirname()  did not correctly handle pathnames with trailing '/'
       characters, and generated a segfault if given a NULL argument.

PRZYKŁADY

       Następujący przykładowy kod pokazuje użycie funkcji basename() i dirname():
           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)

TŁUMACZENIE

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

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

Linux man-pages 6.03                            5 lutego 2023 r.                                     basename(3)