getcwd(3)

NUME
getcwd, getwd, get_current_dir_name - obține directorul curent de lucru

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <unistd.h>

char *getcwd(char buf[.size], size_t size);
char *get_current_dir_name(void);

[[depreciat]] char *getwd(char buf[PATH_MAX]);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

get_current_dir_name():
    _GNU_SOURCE

getwd():
    Începând cu glibc 2.12:
        (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
            || /* glibc >= 2.19: */ _DEFAULT_SOURCE
            || /* glibc <= 2.19: */ _BSD_SOURCE
    Înainte de glibc 2.12:
        _BSD_SOURCE || _XOPEN_SOURCE >= 500

DESCRIERE
Aceste funcții returnează un șir de caractere cu terminație nulă care conține un nume de rută absolut care este directorul de lucru curent al procesului apelant. Numele rutei este returnat ca rezultat al funcției și prin intermediul argumentului buf, dacă este prezent.

Funcția getcwd() copiază un nume de rută absolut al directorului curent de lucru în matricea indicată de buf, care are lungimea size.

Dacă lungimea numelui de rută absolut al directorului de lucru curent, inclusiv octetul nul de terminare, depășește size octeți, se returnează NULL, iar errno este stabilită la ERANGE; o aplicație trebuie să verifice această eroare și să aloce o memorie tampon mai mare dacă este necesar.

Ca extensie la standardul POSIX.1-2001, getcwd() al glibc alocă memoria tampon dinamic folosind malloc(3) dacă buf este NULL. În acest caz, memoria tampon alocată are lungimea size, cu excepția cazului în care size este zero, când buf este alocat cât de mare este necesar. Apelantul trebuie să elibereze cu free(3) memoria tampon returnată.

get_current_dir_name() va aloca cu malloc(3) o matrice suficient de mare pentru a conține ruta absolută a directorului curent de lucru. Dacă variabila de mediu PWD este definită, iar valoarea sa este corectă, atunci această valoare va fi returnată. Apelantul trebuie să elibereze cu free(3) memoria tampon returnată.

getwd() nu malloc(3) nicio memorie. Argumentul buf trebuie să fie un indicator către o matrice cu o lungime de cel puțin PATH_MAX octeți. Dacă lungimea numelui de rută absolut al directorului de lucru curent, inclusiv octetul nul de terminare, depășește PATH_MAX octeți, se returnează NULL, iar errno este stabilităt la ENAMETOOLONG. - Rețineți că pe unele sisteme, PATH_MAX poate să nu fie o constantă în timp de compilare; în plus, valoarea sa poate depinde de sistemul de fișiere, consultați pathconf(3)). - Din motive de portabilitate și securitate, utilizarea lui getwd() este depreciată.

VALOAREA RETURNATĂ
În caz de succes, aceste funcții returnează un indicator către un șir de caractere care conține numele de rută al directorului de lucru curent. În cazul funcțiilor getcwd() și getwd(), aceasta are aceeași valoare ca buf.

În caz de eșec, aceste funcții returnează NULL, iar errno este configurată pentru a indica eroarea. Conținutul matricei indicate de buf este nedefinit în caz de eroare.

ERORI-IEȘIRE

EACCES
    Permisiunea de a citi sau de a căuta o componentă a numelui fișierului a fost refuzată.

EFAULT
    buf indică o adresă greșită.

EINVAL
    Argumentul size este zero și buf nu este un indicator nul.

EINVAL
    getwd(): buf este NULL.

ENAMETOOLONG
    getwd(): Dimensiunea șirului de nume de rută absolut cu terminație nulă depășește PATH_MAX octeți.

ENOENT
    Directorul curent de lucru a fost dezlegat(șters).

ENOMEM
    Memorie insuficientă.

ERANGE
    Argumentul size este mai mic decât lungimea numelui de rută absolut al directorului de lucru, inclusiv octetul nul de încheiere. Trebuie să alocați o matrice mai mare și să încercați din nou.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
getcwd(), getwd() | Siguranța firelor | MT-Safe
get_current_dir_name() | Siguranța firelor | MT-Safe env

VERSIUNI
POSIX.1-2001 lasă comportamentul lui getcwd() nespecificat dacă buf este NULL.

POSIX.1-2001 nu definește nicio eroare pentru getwd().

VERSIUNI

  Diferențe între biblioteca C și nucleu
În Linux, nucleul oferă un apel de sistem getcwd(), pe care funcțiile descrise în această pagină îl vor utiliza dacă este posibil. Apelul de sistem ia aceleași argumente ca și funcția de bibliotecă cu același nume, dar este limitat la returnarea a cel mult PATH_MAX octeți. (Înainte de Linux 3.12, limita de dimensiune a numelui de rută returnat era dimensiunea paginii de sistem. Pe multe arhitecturi, PATH_MAX și dimensiunea paginii de sistem sunt ambele de 4096 octeți, dar câteva arhitecturi au o dimensiune a paginii mai mare). Dacă lungimea numelui de rută al directorului de lucru curent depășește această limită, atunci apelul de sistem eșuează cu eroarea ENAMETOOLONG. În acest caz, funcțiile bibliotecii revin la o implementare alternativă (mai lentă) care returnează numele de rută complet.

În urma unei modificări în Linux 2.6.36, numele de rută returnat de apelul de sistem getcwd() va fi prefixat cu șirul „(unreachable)” dacă directorul curent nu se află sub directorul rădăcină al procesului curent (de exemplu, deoarece procesul a stabilit o nouă rădăcină a sistemului de fișiere utilizând chroot(2) fără a-și schimba directorul curent în noua rădăcină). Un astfel de comportament poate fi cauzat și de un utilizator neprivilegiat prin schimbarea directorului curent într-un alt spațiu de nume de montare. Atunci când au de-a face cu nume de rută din surse neîncrezătoare, apelanții funcțiilor descrise în această pagină ar trebui să ia în considerare verificarea dacă numele de rută returnat începe cu „/” sau „(” pentru a evita interpretarea eronată a unei rute inaccesibile ca fiind un nume de rută relativ.

STANDARDE

getcwd()
    POSIX.1-2008.

get_current_dir_name()
    GNU.

getwd()
    Niciunul.

ISTORIC

getcwd()
    POSIX.1-2001.

getwd()
    POSIX.1-2001, dar marcat ca ÎNVECHIT. Eliminat în POSIX.1-2008. Utilizați în schimb getcwd().

Sub Linux, aceste funcții utilizează apelul de sistem getcwd() (disponibil începând cu Linux 2.1.92). Pe sistemele mai vechi, acestea ar interoga /proc/self/cwd. Dacă lipsesc atât apelul de sistem, cât și sistemul de fișiere proc, este apelată o implementare generică. Numai în acest caz aceste apeluri pot eșua sub Linux cu EACCES.

NOTE
Aceste funcții sunt adesea utilizate pentru a salva locația directorului curent de lucru în scopul revenirii la acesta ulterior. Deschiderea directorului curent („.”) și apelarea fchdir(2) pentru a reveni este de obicei o alternativă mai rapidă și mai fiabilă atunci când sunt disponibili suficient de mulți descriptori de fișiere, în special pe alte platforme decât Linux.

ERORI
De la modificarea Linux 2.6.36 care a adăugat „(unreachable)” în circumstanțele descrise mai sus, implementarea glibc a getcwd() nu s-a conformat POSIX și a returnat un nume de rută relativ atunci când locația API necesită un nume de rută absolut. Începând cu glibc 2.27, acest lucru este corectat; apelarea getcwd() de la un astfel de nume de rută va duce acum la eșec cu ENOENT.

CONSULTAȚI ȘI
pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)

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.