realpath(3) Library Functions Manual realpath(3)

realpath - returnează numele de rută absolut canonizat

Biblioteca C standard (libc, -lc)

#include <limits.h>
#include <stdlib.h>
char *realpath(const char *restrict path,
               char *restrict resolved_path);
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

realpath():


_XOPEN_SOURCE >= 500
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE

realpath() extinde toate legăturile simbolice și rezolvă referințele la caracterele /./, /../ și la caracterele suplimentare '/' din șirul cu terminație nulă numit de path pentru a produce un nume de rută absolut canonizat. Numele de rută rezultat este stocat sub forma unui șir cu terminație nulă, până la un maxim de PATH_MAX octeți, în memoria tampon indicată de resolved_path. Ruta rezultată nu va avea nici o legătură simbolică, nici componente /./ sau /../.

Dacă resolved_path este specificat ca fiind NULL, atunci realpath() utilizează malloc(3) pentru a aloca o memorie tampon de până la PATH_MAX octeți pentru a păstra numele de rută rezolvat și returnează un indicator la această memorie tampon. Apelantul ar trebui să elibereze această memorie tampon folosind free(3).

Dacă nu există nicio eroare, realpath() returnează un indicator către resolved_path.

În caz contrar, se returnează NULL, conținutul matricei resolved_path este nedefinit, iar errno este configurată pentru a indica eroarea.

Permisiunea de citire sau de căutare a fost refuzată pentru o componentă a prefixului rutei.
path este NULL; (înainte de glibc 2.3, această eroare este returnată și dacă resolved_path este NULL).
A apărut o eroare de In/Ieș în timpul citirii din sistemul de fișiere.
S-au întâlnit prea multe legături simbolice la conversia numelui de rută.
O componentă a unui nume de rută a depășit NAME_MAX caractere sau un nume de rută întreg a depășit PATH_MAX caractere.
Fișierul numit nu există.
Memorie insuficientă.
O componentă a prefixului de rută nu este un director.

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

Interfață Atribut Valoare
realpath() Siguranța firelor MT-Safe

Dacă apelul eșuează fie cu EACCES, fie cu ENOENT și resolved_path nu este NULL, atunci prefixul din path care nu poate fi citit sau nu există este returnat în resolved_path.

POSIX.1-2008.

4.4BSD, POSIX.1-2001, Solaris.

POSIX.1-2001 spune cu privire la comportamentul în cazul în care resolved_path este NULL, că este definit de implementare. POSIX.1-2008 specifică comportamentul descris în această pagină.

În 4.4BSD și Solaris, limita de lungime a numelui de rută este MAXPATHLEN (se găsește în <sys/param.h>). SUSv2 prescrie PATH_MAX și NAME_MAX, așa cum se găsește în <limits.h> sau cum este furnizată de funcția pathconf(3). Un fragment tipic de sursă ar fi


#ifdef PATH_MAX

path_max = PATH_MAX; #else
path_max = pathconf(path, _PC_PATH_MAX);
if (path_max <= 0)
path_max = 4096; #endif

(Dar consultați secțiunea ERORI).

Versiunea standard POSIX.1-2001 a acestei funcții este incorectă prin proiectare, deoarece este imposibil să se determine o dimensiune adecvată pentru memoria tampon de ieșire, resolved_path. În conformitate cu POSIX.1-2001, este suficientă o memorie tampon de dimensiune PATH_MAX, dar PATH_MAX nu trebuie să fie o constantă definită și este posibil să trebuiască să fie obținută folosind pathconf(3). Iar solicitarea lui pathconf(3) nu ajută cu adevărat, deoarece, pe de o parte, POSIX avertizează că rezultatul lui pathconf(3) poate fi uriaș și nepotrivit pentru alocarea de memorie, iar pe de altă parte, pathconf(3) poate returna -1 pentru a indica faptul că PATH_MAX nu este delimitat. Caracteristica resolved_path == NULL, care nu este standardizată în POSIX.1-2001, dar este standardizată în POSIX.1-2008, permite evitarea acestei probleme de proiectare.

realpath(1), readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)

Traducerea în limba română a acestui manual a fost creată 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