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

NOM

       execveat - Exécuter un programme relatif au descripteur de fichier d'un répertoire

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <linux/fcntl.h>      /* Définition des constantes AT_* */
       #include <unistd.h>

       int execveat(int dirfd, const char *pathname,
                    char *const _Nullable argv[],
                    char *const _Nullable envp[],
                    int flags);

DESCRIPTION

       L'appel  système  execveat() exécute le programme auquel renvoient dirfd et pathname. Il opère exactement
       de la même manière que execve(2), excepté les différences décrites dans cette page de manuel.

       Si le nom de chemin fourni dans pathname est  relatif,  il  est  interprété  relativement  au  répertoire
       référencé  par  le descripteur de fichier dirfd (plutôt que relativement au répertoire de travail courant
       du processus appelant, comme cela est fait par execve(2) pour un chemin relatif).

       Si pathname est  relatif  et  que  dirfd  est  la  valeur  spéciale  AT_FDCWD,  pathname  est  interprété
       relativement au répertoire de travail courant du processus appelant (comme avec execve(2)).

       Si pathname est absolu, alors dirfd est ignoré.

       Si  pathname  est  une  chaîne vide et si le drapeau AT_EMPTY_PATH est indiqué, le descripteur de fichier
       dirfd spécifie le fichier à exécuter (c-est-à-dire que dirfd renvoie à un fichier exécutable et non à  un
       répertoire).

       L'argument flags est un masque de bit qui peut comprendre zéro ou plusieurs des drapeaux suivants :

       AT_EMPTY_PATH
              Si pathname est une chaîne vide, opérer sur le fichier auquel renvoie dirfd (qu'on peut obtenir en
              utilisant le drapeau O_PATH de open(2)).

       AT_SYMLINK_NOFOLLOW
              Si  le fichier identifié par dirfd est un pathname non NULL est un lien symbolique, l'appel échoue
              avec l'erreur ELOOP.

VALEUR RENVOYÉE

       En cas de réussite, execveat() ne renvoie rien. En cas d'échec il renvoie -1 et errno est positionné pour
       indiquer l'erreur.

ERREURS

       Les mêmes erreurs qui apparaissent pour  execve(2)  peuvent  apparaître  pour  execveat(2).  Les  erreurs
       supplémentaires suivantes peuvent également se produire pour execveat(2) :

       pathname
              est relatif mais dirfd n'est ni AT_FDCWD, ni un descripteur de fichier valable.

       EINVAL flags contient un attribut non valable.

       ELOOP  flags  comprend  AT_SYMLINK_NOFOLLOW et le fichier identifié par dirfd et un pathname non NULL est
              un lien symbolique.

       ENOENT Le programme identifié par dirfd et pathname exige d'utiliser un interpréteur  (tel  qu'un  script
              qui  commence  par  « #! »,  mais  le  descripteur  de  fichier dirfd a été ouvert avec le drapeau
              O_CLOEXEC, d'où il s'en suit que le fichier du programme est inaccessible à l'interpréteur  lancé.
              Voir BOGUES.

       ENOTDIR
              pathname  est  relatif  et  dirfd est un descripteur de fichier faisant référence à un fichier qui
              n'est pas un dossier.

VERSIONS

       execveat() a été ajouté dans Linux 3.19. La prise en charge de la bibliothèque  a  été  ajoutée  dans  la
       glibc 2.34.

STANDARDS

       L'appel système execveat() est spécifique à Linux.

NOTES

       Outre  les  raisons  expliquées  dans openat(2), l'appel système execveat() est également nécessaire pour
       permettre à fexecve(3) d'être implémenté sur des systèmes où aucun système de fichiers /proc n'est monté.

       Si on lui demande d'exécuter un fichier script, argv[0] qui est passé à l'interpréteur de script est  une
       chaîne  sous  la  forme  /dev/fd/N ou /dev/fd/N/P, où N est le numéro du descripteur de fichier passé via
       l'argument dirfd. Une chaîne sous la première forme apparaît quand AT_EMPTY_PATH est utilisé. Une  chaîne
       sous la deuxième forme apparaît quand le script est indiqué via dirfd et pathname ; dans ce cas, P est la
       valeur donnée à pathname.

       Pour  les  mêmes  raisons  décrites  dans  fexecve(3), l'usage naturel quand on utilise execveat() est de
       positionner l'attribut close-on-exec sur dirfd (mais voir BOGUES).

BOGUES

       L'erreur  ENOENT  décrite  ci-dessus  signifie  qu'il  n'est  pas  possible  de  positionner   l'attribut
       close-on-exec sur le descripteur de fichier donné à l'appel sous la forme :

           execveat(fd, "", argv, envp, AT_EMPTY_PATH);

       Cependant,  l'impossibilité de positionner l'attribut close-on-exec signifie qu'un descripteur de fichier
       renvoyant à un script a une fuite via le script  lui-même.  Outre  qu'elle  gaspille  le  descripteur  de
       fichier,  cette  fuite  peut  l'épuiser  dans  des scénari où les scripts utilisent execveat() de manière
       récursive.

VOIR AUSSI

       execve(2), openat(2), fexecve(3)

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       debian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    2 janvier 2023                                      execveat(2)