Provided by: manpages-fr-dev_4.27.0-1_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.

STANDARDS

       Linux.

HISTORIQUE

       Linux 3.19, glibc 2.34.

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.9.1                     2 mai 2024                                        execveat(2)