basename(3)

NUME
basename, dirname - analizează componentele numelui rutei

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.