Provided by: manpages-fr-dev_4.19.0-7_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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.