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

NOM

       popen, pclose - Tuyau entrant ou sortant pour un processus

SYNOPSIS

       #include <stdio.h>

       FILE *popen(const char *command, const char *type);

       int pclose(FILE *stream);

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

       popen(), pclose() :
           _POSIX_C_SOURCE >= 2
               || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIPTION

       La fonction popen() engendre un processus en créant un tube (pipe), exécutant  un  fork(),
       et  en  invoquant  le  shell. Comme un tube est unidirectionnel par définition, l'argument
       type doit indiquer seulement une lecture ou une écriture, et non pas  les  deux.  Le  flux
       correspondant sera ouvert en lecture seule ou écriture seule.

       The  command  argument is a pointer to a null-terminated string containing a shell command
       line. This command is passed to /bin/sh using the -c  flag;  interpretation,  if  any,  is
       performed by the shell.

       The  type  argument is a pointer to a null-terminated string which must contain either the
       letter 'r' for reading or the letter 'w' for writing. Since glibc 2.9, this  argument  can
       additionally  include the letter 'e', which causes the close-on-exec flag (FD_CLOEXEC)  to
       be set on the underlying file descriptor; see the description of  the  O_CLOEXEC  flag  in
       open(2)  for reasons why this may be useful.

       La  valeur  renvoyée par popen() est un flux d'entrée-sortie normal, à la seule différence
       qu'il doit être fermé en appelant pclose() à la place de  fclose(3).  L'écriture  dans  le
       flux  correspond à écrire sur l'entrée standard de la commande. Le flux de sortie standard
       de la commande est le même que celui  du  processus  appelant  popen(),  à  moins  que  la
       commande le modifie. Symétriquement, la lecture depuis un flux correspond à lire la sortie
       standard de la commande, et dans ce cas l'entrée standard de la commande est la  même  que
       celle du processus appelant popen().

       Note that output popen()  streams are block buffered by default.

       La  fonction  pclose()  attend que le processus correspondant se termine, et renvoie alors
       l'état de sortie de la commande, comme en utilisant wait4(2).

VALEUR RENVOYÉE

       popen(): on success, returns a pointer to an open stream that can be used to read or write
       to  the  pipe;  if the fork(2)  or pipe(2)  calls fail, or if the function cannot allocate
       memory, NULL is returned.

       pclose(): on success, returns the exit status of the  command;  if  wait4(2)   returns  an
       error, or some other error is detected, -1 is returned.

       Both functions set errno to an appropriate value in the case of an error.

ERREURS

       La  fonction  popen  ne  remplit pas errno si une allocation mémoire échoue. Si les appels
       fork(2) ou pipe(2) sous-jacents échouent, errno est  correctement  rempli.  Si  l'argument
       type est invalide, et si cette condition est détectée, errno contient EINVAL.

       Si pclose() n'arrive pas à obtenir l'état du fils, errno contient ECHILD.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌──────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├──────────────────┼──────────────────────┼─────────┤
       │popen(), pclose() │ Sécurité des threads │ MT-Safe │
       └──────────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008.

       La valeur « e » pour type est une extension Linux.

NOTES

       Note: carefully read Caveats in system(3).

BOGUES

       Comme l'entrée standard d'une commande ouverte en lecture partage son pointeur de position
       dans le flux avec le processus appelant popen(), si le processus original a  effectué  des
       lectures  en  tampon,  la position du flux d'entrée de la commande peut être différente de
       celle attendue.  Symétriquement,  la  sortie  d'une  commande  ouverte  en  écriture  peut
       s'emmêler avec celle du processus original. Le second problème peut être évité en appelant
       fflush(3) avant popen().

       Il n'est pas possible de distinguer un échec d'exécution du  shell  lui-même,  d'un  échec
       d'exécution d'une commande par le shell, ni même d'une sortie immédiate de la commande. Le
       seul indice est un code de retour de 127.

VOIR AUSSI

       sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(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  Frédéric  Hantrais
       <fhantrais@gmail.com>

       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 ⟨⟩.