Provided by: manpages-fr-dev_4.23.1-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  ⟨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⟩.