fexecve(3) Library Functions Manual fexecve(3) NUME fexecve - executa programul specificat prin intermediul descriptorului de fiier BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int fexecve(int fd, char *const argv[], char *const envp[]); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): fexecve(): Incepand cu glibc 2.10 _POSIX_C_SOURCE >= 200809L Inainte de glibc 2.10: _GNU_SOURCE DESCRIERE fexecve() indeplinete aceeai sarcina ca i execve(2), cu diferena ca fiierul care urmeaza sa fie executat este specificat printr-un descriptor de fiier, fd, mai degraba decat printr-un nume de ruta. Descriptorul de fiier fd trebuie sa fie deschis numai-pentru-citire (O_RDONLY) sau cu fanionul O_PATH, iar apelantul trebuie sa aiba permisiunea de a executa fiierul la care se refera. VALOAREA RETURNATA Un apel reuit la fexecve() nu returneaza niciodata. In caz de eroare, funcia returneaza, cu o valoare a rezultatului de -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE Erorile sunt ca pentru execve(2), cu urmatoarele adaugiri: EINVAL fd nu este un descriptor de fiier valid, sau argv este NULL, sau envp este NULL. ENOENT Fanionul close-on-exec este activat in fd, iar fd se refera la un script. A se vedea ERORI. ENOSYS Nucleul nu ofera apelul de sistem execveat(2), i sistemul de fiiere /proc nu a putut fi accesat. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |fexecve() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ STANDARDE POSIX.1-2008. ISTORIC glibc 2.3.2. In Linux cu versiunile glibc 2.26 i anterioare, fexecve() este implementata utilizand sistemul de fiiere proc(5), astfel incat /proc trebuie sa fie montat i disponibil in momentul apelului. Incepand cu glibc 2.27, in cazul in care nucleul subiacent accepta apelul de sistem execveat(2), atunci fexecve() este implementata utilizand acest apel de sistem, cu avantajul ca /proc nu trebuie sa fie montat. NOTE Ideea din spatele fexecve() este de a permite apelantului sa verifice (suma de control) coninutul unui executabil inainte de a-l executa. Simpla deschidere a fiierului, verificarea sumei de control a coninutului i apoi efectuarea unui execve(2) nu ar fi suficienta, deoarece, intre cele doua etape, numele fiierului sau un prefix de director al numelui rutei ar fi putut fi schimbat (de exemplu, prin modificarea intei unei legaturi simbolice). fexecve() nu atenueaza problema ca coninutul unui fiier ar putea fi modificat intre verificarea sumei de control i apelul la fexecve(); pentru aceasta, soluia este de a se asigura ca permisiunile asupra fiierului impiedica modificarea acestuia de catre utilizatorii rau intenionai. Modul firesc de utilizare a fexecve() este de a activa fanionul ,,close-on-exec" in fd, astfel incat descriptorul de fiier sa nu ajunga la programul care este executat. Aceasta abordare este fireasca din doua motive. In primul rand, previne consumarea inutila a descriptorilor de fiiere (in mod normal, programul executat nu are nevoie de un descriptor de fiier care se refera la programul insui). In al doilea rand, in cazul in care fexecve() este utilizata in mod recursiv, utilizarea fanionului ,,closed-on-exec" previne epuizarea descriptorului de fiier care ar rezulta din faptul ca fiecare pas in recursivitate ar face ca inca un descriptor de fiier sa fie transmis catre noul program (dar vedei seciunea Erori). ERORI Daca fd se refera la un script (adica este un fiier text executabil care numete un interpret de script cu o prima linie care incepe cu caracterele #!) i daca pentru fd a fost activat fanionul ,,close-on-exec", atunci fexecve() eueaza cu eroarea ENOENT. Aceasta eroare apare deoarece, in momentul in care este executat interpretul scriptului, fd a fost deja inchis din cauza fanionului ,,close-on-exec". Astfel, fanionul ,,close-on-exec" nu poate fi activat in fd daca acesta se refera la un script, ceea ce duce la problemele descrise in NOTE. CONSULTAI I execve(2), execveat(2) 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.06 31 octombrie 2023 fexecve(3)