bionic (3) basename.3.gz

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