Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       popen, pclose — Tube entrant ou sortant d'un processus

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <stdio.h>

       FILE *popen(const char *commande, const char *type);
       int pclose(FILE *flux);

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

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

DESCRIPTION

       La fonction popen() engendre un processus en créant un tube (pipe), en exécutant un fork()
       et  en  invoquant  l'interpréteur  de  commande.  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.

       L'argument commande est un pointeur sur une chaîne de caractères terminée par un caractère
       NULL, et contenant une  ligne  de  commande  de  l'interpréteur  de  commandeshell.  Cette
       commande est transmise à /bin/sh en utilisant l'option -c. L'interprétation en est laissée
       à l'interpréteur.

       L'argument type est un pointeur sur une chaîne de caractères  terminée  par  un  caractère
       NULL  qui  doit  contenir  soit la lettre « r » pour la lecture, soit la lettre « w » pour
       l'écriture. Depuis la glibc 2.9, ce paramètre peut également contenir la lettre « e »  qui
       a  pour  conséquence  l'activation  de  l'attribut  « close-on-exec » (FD_CLOEXEC) pour le
       descripteur de fichier sous-jacent ; consultez la description de l'attribut O_CLOEXEC dans
       open(2) pour savoir quand c'est utile.

       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().

       Notez  que,  par  défaut,  les flux de sortie fournis par popen() disposent d'un tampon de
       bloc.

       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()  :  en  cas  de succès la fonction renvoie un pointeur vers un flux ouvert pouvant
       être utilisé pour lire ou écrire dans le tube  si les appels fork(2) ou  pipe(2)  échouent
       ou si la fonction ne peut pas allouer assez de mémoire, la fonction renvoie NULL.

       pclose() :  en  cas  de  succès, la fonction renvoie le code de retour de la commande ; si
       wait4(2) renvoie un erreur ou si une autre erreur est détectée, -1 est renvoyé.

       En cas d'erreur, les deux fonctions définissent errno pour indiquer l'erreur.

ERREURS

       La fonction popen ne définit pas errno si une allocation mémoire  échoue.  Si  les  appels
       fork(2)  ou  pipe(2)  sous-jacents  échouent,  errno est défini pour indiquer l'erreur. Si
       l'argument type n'est pas valable et si  cette  condition  est  détectée,  errno  contient
       EINVAL.

       Si pclose() n'arrive pas à obtenir l'état de l'enfant, 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 │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

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

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

NOTES

       Note : lisez attentivement les avertissements dans 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)

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>,  Frédéric  Hantrais
       <fhantrais@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

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