Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       fexecve - execută programul specificat prin intermediul descriptorului de fișier

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <unistd.h>

       int fexecve(int fd, char *const argv[], char *const envp[]);

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

       fexecve():
           Începând cu glibc 2.10
               _POSIX_C_SOURCE >= 200809L
           Înainte de glibc 2.10:
               _GNU_SOURCE

DESCRIERE

       fexecve()  îndeplinește  aceeași  sarcină  ca  și execve(2), cu diferența că fișierul care urmează să fie
       executat este specificat printr-un descriptor de fișier, fd, mai degrabă decât printr-un  nume  de  rută.
       Descriptorul  de  fișier fd trebuie să fie deschis numai-pentru-citire (O_RDONLY) sau cu fanionul O_PATH,
       iar apelantul trebuie să aibă permisiunea de a executa fișierul la care se referă.

VALOAREA RETURNATĂ

       Un apel reușit la fexecve() nu returnează niciodată.  În caz de eroare, funcția returnează, cu o  valoare
       a rezultatului de -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

       Erorile sunt ca pentru execve(2), cu următoarele adăugiri:

       EINVAL fd nu este un descriptor de fișier valid, sau argv este NULL, sau envp este NULL.

       ENOENT Fanionul close-on-exec este activat în fd, iar fd se referă la un script.  A se vedea ERORI.

       ENOSYS Nucleul nu oferă apelul de sistem execveat(2), și sistemul de fișiere /proc nu a putut fi accesat.

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────┬───────────────────┬─────────┐
       │ InterfațăAtributValoare │
       ├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
       │ fexecve()                                                               │ Siguranța firelor │ MT-Safe │
       └─────────────────────────────────────────────────────────────────────────┴───────────────────┴─────────┘

STANDARDE

       POSIX.1-2008.

ISTORIC

       glibc 2.3.2.

       În  Linux  cu  versiunile  glibc  2.26  și  anterioare, fexecve() este implementată utilizând sistemul de
       fișiere proc(5), astfel încât /proc trebuie să fie montat și disponibil în momentul  apelului.   Începând
       cu  glibc 2.27, în cazul în care nucleul subiacent acceptă apelul de sistem execveat(2), atunci fexecve()
       este implementată utilizând acest apel de sistem, cu avantajul că /proc nu trebuie să fie montat.

NOTE

       Ideea din spatele fexecve() este de a permite apelantului să verifice (suma de control)  conținutul  unui
       executabil  înainte  de  a-l  executa.   Simpla  deschidere  a fișierului, verificarea sumei de control a
       conținutului și apoi efectuarea unui execve(2) nu ar fi suficientă,  deoarece,  între  cele  două  etape,
       numele  fișierului  sau  un prefix de director al numelui rutei ar fi putut fi schimbat (de exemplu, prin
       modificarea țintei unei legături simbolice).  fexecve() nu atenuează problema că conținutul  unui  fișier
       ar  putea fi modificat între verificarea sumei de control și apelul la fexecve(); pentru aceasta, soluția
       este de a  se  asigura  că  permisiunile  asupra  fișierului  împiedică  modificarea  acestuia  de  către
       utilizatorii rău intenționați.

       Modul  firesc  de  utilizare  a  fexecve()  este de a activa fanionul „close-on-exec” în fd, astfel încât
       descriptorul de fișier să nu ajungă la programul care este executat.  Această abordare este firească  din
       două  motive.   În  primul  rând,  previne consumarea inutilă a descriptorilor de fișiere (în mod normal,
       programul executat nu are nevoie de un descriptor de fișier care se referă la programul însuși).   În  al
       doilea  rând,  în  cazul  în  care  fexecve()  este  utilizată  în  mod  recursiv,  utilizarea fanionului
       „closed-on-exec” previne epuizarea descriptorului de fișier care ar rezulta din faptul că fiecare pas  în
       recursivitate  ar  face  ca  încă  un descriptor de fișier să fie transmis către noul program (dar vedeți
       secțiunea Erori).

ERORI

       Dacă fd se referă la un script (adică este un fișier text executabil care numește un interpret de  script
       cu  o  primă  linie  care  începe  cu  caracterele  #!)  și  dacă  pentru  fd  a  fost  activat  fanionul
       „close-on-exec”, atunci fexecve() eșuează cu eroarea ENOENT.  Această eroare apare deoarece, în  momentul
       în care este executat interpretul scriptului, fd a fost deja închis din cauza fanionului „close-on-exec”.
       Astfel,  fanionul  „close-on-exec”  nu poate fi activat în fd dacă acesta se referă la un script, ceea ce
       duce la problemele descrise în NOTE.

CONSULTAȚI ȘI

       execve(2), execveat(2)

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 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.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                         fexecve(3)