Scroll to navigation

basename(3) Library Functions Manual basename(3)

NUME

basename, dirname - analizează componentele numelui rutei

BIBLIOTECA

Biblioteca C standard (libc, -lc)

REZUMAT

#include <libgen.h>
char *dirname(char *ruta);
char *basename(char *ruta);

DESCRIERE

Atenție: există două funcții diferite basename(); a se vedea mai jos.

Funcțiile dirname() și basename() descompun un șir de nume de rută cu terminație nulă în componentele director și nume de fișier. În cazul obișnuit, dirname() returnează șirul până la „/” final, dar fără a-l include, iar basename() returnează componenta care urmează după „/” final. Caracterele „/” de la sfârșit nu sunt considerate ca făcând parte din numele de rută.

Dacă ruta nu conține o bară oblică, dirname() returnează șirul „.”, în timp ce basename() returnează o copie a rutei. Dacă ruta este șirul „/”, atunci atât dirname(), cât și basename() returnează șirul „/”. Dacă ruta este un indicator nul sau indică un șir gol, atunci atât dirname(), cât și basename() returnează șirul „.”.

Concatenând șirul returnat de dirname(), un „/” și șirul returnat de basename() se obține un nume de rută complet.

Atât dirname(), cât și basename() pot modifica conținutul rutei, astfel încât poate fi de dorit să se transfere o copie atunci când se apelează una dintre aceste funcții.

Aceste funcții pot returna indicatori către memoria alocată static, care poate fi suprascrisă de apelurile ulterioare. Alternativ, ele pot returna un indicator către o parte din rută, astfel încât șirul la care face referire ruta să nu fie modificat sau eliberat până când indicatorul returnat de funcție nu mai este necesar.

Următoarea listă de exemple (preluată din SUSv2) prezintă șirurile de caractere returnate de dirname() și basename() pentru diferite rute:

ruta dirname basename
/usr/lib /usr lib
/usr/ / usr
usr . usr
/ / /
. . .
.. . ..

VALOAREA RETURNATĂ

Atât dirname(), cât și basename() returnează indicatori către șiruri de caractere cu terminație nulă; (nu pasați acești indicatori la free(3)).

ATRIBUTE

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
basename(), dirname() Siguranța firelor MT-Safe

VERSIUNI

Există două versiuni diferite ale basename() - versiunea POSIX descrisă mai sus și versiunea GNU, care se obține după definirea acesteia:


    #define _GNU_SOURCE         /* Consultați feature_test_macros(7) */
#include <string.h>

Versiunea GNU nu-și modifică niciodată argumentul și returnează șirul gol atunci când ruta are o bară oblică la sfârșit și, în special, atunci când este „/”. Nu există o versiune GNU a dirname().

Cu glibc, se obține versiunea POSIX a basename() atunci când <libgen.h> este inclus, iar în caz contrar, versiunea GNU.

STANDARDE

POSIX.1-2008.

ISTORIC

POSIX.1-2001.

ERORI

În implementarea glibc, versiunile POSIX ale acestor funcții modifică argumentul ruta și generează o eroare de segmentare atunci când sunt apelate cu un șir static, cum ar fi „/usr/”.

Înainte de glibc 2.2.1, versiunea glibc a dirname() nu gestiona corect numele de rută cu caractere „/” la sfârșit și genera o eroare de segmentare dacă primea un argument NULL.

EXEMPLE

Următorul fragment de cod demonstrează utilizarea 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);

CONSULTAȚI ȘI

basename(1), dirname(1)

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

20 iulie 2023 Pagini de manual de Linux 6.05.01