basename(3) Library Functions Manual basename(3) NAZWA basename, dirname - wydzielenie skladnikow nazwy sciezki BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include char *dirname(char *path); char *basename(char *path); OPIS Ostrzezenie: istnieja dwie rozne funkcje basename(); patrz nizej. 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. Jesli path nie zawiera ukosnika, dirname() zwraca lancuch ".", podczas gdy basename() zwraca kopie path. Jesli path jest lancuchem "/", to zarowno dirname(), jak i basename() zwracaja lancuch "/". Jesli path jest wskaznikiem null lub wskazuje na pusty lancuch znakow, to zarowno dirname(), jak i basename() zwracaja lancuch ".". Polaczenie lancucha zwroconego przez dirname() z "/" i lancuchem zwroconym przez basename() daje pelna nazwe sciezki dostepu. Zarowno dirname(), jak i basename() moga zmienic zawartosc path, tak wiec moze byc potrzebne przekazanie kopii podczas wywolywania ktorejkolwiek z tych funkcji. Funkcje te moga zwrocic wskazniki do statycznie alokowanej pamieci, ktora moze zostac nadpisana przez kolejne wywolania. Alternatywnie moga zwrocic wskazniki do czesci path, tak ze lancuch znakow wskazywany przez path nie powinien byc ani zmieniany, ani usuwany az do momentu, w ktorym wskaznik zwrocony przez opisywane funkcje nie bedzie juz potrzebny. Ponizsza lista przykladow (wzieta z SUSv2) pokazuje lancuchy znakow zwracane przez dirname() i basename() dla roznych sciezek: sciezka dirname basename /usr/lib /usr lib /usr/ / usr usr . usr / / / . . . .. . .. WARTOSC ZWRACANA Zarowno dirname(), jak i basename() zwracaja wskazniki do zakonczonych znakiem null lancuchow znakow (nie nalezy tych wskaznikow przekazywac do free(3)). ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |basename(), dirname() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ WERSJE Istnieja dwie rozne wersji funkcji basename(): wersja POSIX opisana powyzej oraz wersja GNU, ktora jest dostepna po #define _GNU_SOURCE /* Patrz feature_test_macros(7) */ #include Wersja GNU nigdy nie zmienia swojego argumentu oraz zwraca pusty lancuch znakow, jesli path konczy sie znakiem ukosnika, w szczegolnosci gdy path jest rowne "/". Nie istnieje wersja GNU funkcji dirname(). W bibliotece GNU wersja POSIX funkcji basename() jest uzywana, gdy dolaczony jest plik naglowkowy . W przeciwnym wypadku uzywana jest wersja GNU. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001. USTERKI W implementacji biblioteki glibc POSIX-owych wersji tych funkcji modyfikuja argument path i powoduja blad naruszenia ochrony pamieci, jesli sa wywolane z statycznym lancuchem znakow 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. PRZYKLADY Nastepujacy przykladowy kod pokazuje uzycie 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 TAKZE basename(1), dirname(1) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. basename(3)