oracular (3) basename.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       basename, dirname - wydziela składowe ś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.

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

WERSJE

       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.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001.

USTERKI

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

       Do glibc 2.2.1 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ę NULL jako 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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.