Provided by: manpages-ro-dev_4.21.0-2_all bug

NUME

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

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

REZUMAT

       #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

       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.

VERSIUNI

       fexecve() este implementată începând cu glibc 2.3.2.

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.   Această funcție nu este specificată în POSIX.1-2001 și nu este disponibilă pe scară largă
       în alte sisteme.  Este specificată în POSIX.1-2008.

NOTE

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

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

Pagini de manual de Linux 6.03                  15 decembrie 2022                                     fexecve(3)