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