Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       fexecve - Exécuter un programme indiqué par un descripteur de fichier

SYNOPSIS

       #include <unistd.h>

       int fexecve(int fd, char *const argv[], char *const envp[]);

   Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

       fexecve() :
           Depuis la glibc 2.10 :
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Avant la glibc 2.10 :
               _GNU_SOURCE

DESCRIPTION

       fexecve()  effectue  la  même tâche que execve(2), excepté que le fichier à exécuter est indiqué a l’aide
       d’un descripteur de fichier, fd au lieu d'un chemin. Le descripteur de fichier fd  doit  être  ouvert  en
       lecture  seule,  et  l'appelant  doit  avoir  les permissions nécessaires pour exécuter le fichier lié au
       descripteur de fichier.

VALEUR RENVOYÉE

       En cas de réussite, la fonction fexecve() ne revient jamais. En cas d'erreur, la fonction renvoie  -1  et
       errno est définie.

ERREURS

       Les erreurs sont les mêmes que pour execve(2), avec en plus :

       EINVAL fd n'est pas un descripteur de fichier valable, ou argv est NULL, ou envp est NULL.

       ENOSYS Impossible d'accéder au système de fichiers /proc.

VERSIONS

       fexecve() est disponible depuis la glibc 2.3.2.

CONFORMITÉ

       POSIX.1-2008.  Cette  fonction n'est pas spécifiée dans POSIX.1-2001 et n'est que rarement disponible sur
       d'autres systèmes. Cette fonction est spécifiée dans POSIX.1-2008.

NOTES

       Sous Linux, fexecve() est implémentée avec le système de fichiers proc(5), /proc doit donc être monté  et
       disponible lors des appels à fexecve().

       Si   fd  est  un  descripteur  de  fichier  qui  réfère  un  script  et  a  été  marqué  avec  l'attribut
       « close-on-exec » (voir FD_CLOEXEC dans fcntl(2)), fexecve() échouera à exécuter le script, puisque qu'au
       moment où l'interpréteur essaie d'accéder au fichier du script, fd a déjà été fermé.

       L’idée derrière fexecve() est de permettre à l’appelant de vérifier  (avec  une  somme  de  contrôle)  le
       contenu  d’un exécutable avant de l’exécuter. Juste ouvrir le fichier et calculer la somme de contrôle du
       contenu avant de faire un execve() ne suffirait pas puisque, entre les deux étapes, le nom du fichier, ou
       un préfixe de répertoire dans le nom de chemin, pourrait avoir été modifié (par exemple en  modifiant  la
       cible  d’un  lien  symbolique).  fexecve() n’atténue pas le problème que le contenu d’un fichier pourrait
       être modifié entre le calcul de la somme de contrôle et l’appel à fexecve(). Pour cela, la  solution  est
       de  s’assurer  que  les  permissions  sur  le  fichier  l’empêchent  d’être  modifié  par  un utilisateur
       malveillant.

VOIR AUSSI

       execve(2)

COLOPHON

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

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

Linux                                             20 avril 2014                                       FEXECVE(3)