getcwd(3) Library Functions Manual getcwd(3) NUME getcwd, getwd, get_current_dir_name - obine directorul curent de lucru BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include char *getcwd(size_t size; char buf[size], size_t size); char *get_current_dir_name(void); [[depreciat]] char *getwd(char buf[PATH_MAX]); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): get_current_dir_name(): _GNU_SOURCE getwd(): Incepand cu glibc 2.12: (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L) || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE Inainte de glibc 2.12: _BSD_SOURCE || _XOPEN_SOURCE >= 500 DESCRIERE Aceste funcii returneaza un ir de caractere cu terminaie nula care conine un nume de ruta absolut care este directorul de lucru curent al procesului apelant. Numele rutei este returnat ca rezultat al funciei i prin intermediul argumentului buf, daca este prezent. Funcia getcwd() copiaza un nume de ruta absolut al directorului curent de lucru in matricea indicata de buf, care are lungimea size. Daca lungimea numelui de ruta absolut al directorului de lucru curent, inclusiv octetul nul de terminare, depaete size octei, se returneaza NULL, iar errno este stabilita la ERANGE; o aplicaie trebuie sa verifice aceasta eroare i sa aloce o memorie tampon mai mare daca este necesar. Ca extensie la standardul POSIX.1-2001, getcwd() al glibc aloca memoria tampon dinamic folosind malloc(3) daca buf este NULL. In acest caz, memoria tampon alocata are lungimea size, cu excepia cazului in care size este zero, cand buf este alocat cat de mare este necesar. Apelantul trebuie sa elibereze cu free(3) memoria tampon returnata. get_current_dir_name() va aloca cu malloc(3) o matrice suficient de mare pentru a conine ruta absoluta a directorului curent de lucru. Daca variabila de mediu PWD este definita, iar valoarea sa este corecta, atunci aceasta valoare va fi returnata. Apelantul trebuie sa elibereze cu free(3) memoria tampon returnata. getwd() nu malloc(3) nicio memorie. Argumentul buf trebuie sa fie un indicator catre o matrice cu o lungime de cel puin PATH_MAX octei. Daca lungimea numelui de ruta absolut al directorului de lucru curent, inclusiv octetul nul de terminare, depaete PATH_MAX octei, se returneaza NULL, iar errno este stabilitat la ENAMETOOLONG. - Reinei ca pe unele sisteme, PATH_MAX poate sa nu fie o constanta in timp de compilare; in plus, valoarea sa poate depinde de sistemul de fiiere, consultai pathconf(3)). - Din motive de portabilitate i securitate, utilizarea lui getwd() este depreciata. VALOAREA RETURNATA In caz de succes, aceste funcii returneaza un indicator catre un ir de caractere care conine numele de ruta al directorului de lucru curent. In cazul funciilor getcwd() i getwd(), aceasta are aceeai valoare ca buf. In caz de eec, aceste funcii returneaza NULL, iar errno este configurata pentru a indica eroarea. Coninutul matricei indicate de buf este nedefinit in caz de eroare. ERORI-IEIRE EACCES Permisiunea de a citi sau de a cauta o componenta a numelui fiierului a fost refuzata. EFAULT buf indica o adresa greita. EINVAL Argumentul size este zero i buf nu este un indicator nul. EINVAL getwd(): buf este NULL. ENAMETOOLONG getwd(): Dimensiunea irului de nume de ruta absolut cu terminaie nula depaete PATH_MAX octei. ENOENT Directorul curent de lucru a fost dezlegat(ters). ENOMEM Memorie insuficienta. ERANGE Argumentul size este mai mic decat lungimea numelui de ruta absolut al directorului de lucru, inclusiv octetul nul de incheiere. Trebuie sa alocai o matrice mai mare i sa incercai din nou. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +----------------------------------+---------------------+-------------+ |Interfaa | Atribut | Valoare | +----------------------------------+---------------------+-------------+ |getcwd(), getwd() | Sigurana firelor | MT-Safe | +----------------------------------+---------------------+-------------+ |get_current_dir_name() | Sigurana firelor | MT-Safe env | +----------------------------------+---------------------+-------------+ VERSIUNI POSIX.1-2001 lasa comportamentul lui getcwd() nespecificat daca buf este NULL. POSIX.1-2001 nu definete nicio eroare pentru getwd(). VERSIUNI Diferene intre biblioteca C i nucleu In Linux, nucleul ofera un apel de sistem getcwd(), pe care funciile descrise in aceasta pagina il vor utiliza daca este posibil. Apelul de sistem ia aceleai argumente ca i funcia de biblioteca cu acelai nume, dar este limitat la returnarea a cel mult PATH_MAX octei. (Inainte de Linux 3.12, limita de dimensiune a numelui de ruta returnat era dimensiunea paginii de sistem. Pe multe arhitecturi, PATH_MAX i dimensiunea paginii de sistem sunt ambele de 4096 octei, dar cateva arhitecturi au o dimensiune a paginii mai mare). Daca lungimea numelui de ruta al directorului de lucru curent depaete aceasta limita, atunci apelul de sistem eueaza cu eroarea ENAMETOOLONG. In acest caz, funciile bibliotecii revin la o implementare alternativa (mai lenta) care returneaza numele de ruta complet. Ca urmare a unei modificari in Linux 2.6.36, numele de ruta returnat de apelul de sistem getcwd() va fi prefixat cu irul ,,(unreachable)" daca directorul curent nu se afla sub directorul radacina al procesului curent (de exemplu, deoarece procesul a stabilit o noua radacina a sistemului de fiiere utilizand chroot(2) fara a-i schimba directorul curent in noua radacina). Un astfel de comportament poate fi cauzat i de un utilizator neprivilegiat prin schimbarea directorului curent intr-un alt spaiu de nume de montare. Atunci cand au de-a face cu nume de ruta din surse neincrezatoare, apelanii funciilor descrise in aceasta pagina (inainte de glibc 2.27) sau apelul de sistem getcwd() brut ar trebui sa ia in considerare verificarea daca numele de ruta returnat incepe cu ,,/" sau ,,(" pentru a evita interpretarea eronata a unei rute inaccesibile ca fiind un nume de ruta 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 INVECHIT. Eliminat in POSIX.1-2008. Utilizai in schimb getcwd(). Sub Linux, aceste funcii utilizeaza apelul de sistem getcwd() (disponibil incepand cu Linux 2.1.92). Pe sistemele mai vechi, acestea ar interoga /proc/self/cwd. Daca lipsesc atat apelul de sistem, cat i sistemul de fiiere proc, este apelata o implementare generica. Numai in acest caz aceste apeluri pot eua sub Linux cu EACCES. NOTE Aceste funcii sunt adesea utilizate pentru a salva locaia directorului curent de lucru in scopul revenirii la acesta ulterior. Deschiderea directorului curent (,,.") i apelarea fchdir(2) pentru a reveni este de obicei o alternativa mai rapida i mai fiabila atunci cand sunt disponibili suficient de muli descriptori de fiiere, in special pe alte platforme decat Linux. ERORI De la modificarea Linux 2.6.36 care a adaugat ,,(unreachable)" in circumstanele descrise mai sus, implementarea glibc a getcwd() nu s-a conformat POSIX i a returnat un nume de ruta relativ atunci cand locaia API necesita un nume de ruta absolut. Incepand cu glibc 2.27, acest lucru este corectat; apelarea getcwd() de la un astfel de nume de ruta va duce acum la eec cu ENOENT. CONSULTAI I pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.15 28 iunie 2025 getcwd(3)