Provided by: manpages-fr-dev_4.13-4_all bug

NOM

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

SYNOPSIS

       #include <unistd.h>

       int execveat(int dirfd, const char *pathname,
        char *const argv[], char *const 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é  en
       fonction.

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) :

       EBADF  dirfd n'est pas 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é au noyau Linux dans sa version 3.19. La gestion dans la bibliothèque C de GNU est
       en attente.

CONFORMITÉ

       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)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions pour signaler des anomalies et la dernière version de cette page  peuvent  être  trouvées  à
       l'adresse https://www.kernel.org/doc/man-pages/.

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.

Linux                                           15 septembre 2017                                    EXECVEAT(2)