Man page - dirname(3)

Packages contains this manual

Available languages:

en fr es pl ja ru ro

Manual

basename

NAZWA
BIBLIOTEKA
SKŁADNIA
OPIS
WARTOŚĆ ZWRACANA
ATRYBUTY
WERSJE
STANDARDY
HISTORIA
USTERKI
PRZYKŁADY
ZOBACZ TAKŻE
TŁUMACZENIE

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:

Image grohtml-4000144-1.png

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).

Image grohtml-4000144-2.png

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

Tłumaczenie niniejszej strony podręcznika: 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 .