Loading

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 (voir
   feature_test_macros(7)) :

       popen(), pclose() : _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE ||
       _POSIX_SOURCE _BSD_SOURCE || _SVID_SOURCE

       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.

       L’argument  command  est  un  pointeur  sur  une  chaîne de caractères,
       terminée par un caractère nul,  et  contenant  une  ligne  de  commande
       shell. Cette commande est transmise à /bin/sh en utilisant l’option -c.
       L’interprétation en est  laissée  au  shell.  L’argument  type  est  un
       pointeur  sur  une chaîne de caractères, terminée par un caractère nul,
       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 ; 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  ouvert
       par  popen()  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.

       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

       La fonction popen() renvoie NULL si l’appel système fork(2) ou  pipe(2)
       échoue, ou s’il n’a pas assez de mémoire.

       La  fonction  pclose()  renvoie  -1 si wait4(2) échoue, ou si une autre
       erreur est détectée.

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.

CONFORMITÉ

       POSIX.1-2001.

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

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  3.23  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

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement         gérées         par         Nicolas         François
       <nicolas.francois@centraliens.net>   et   l’équipe    francophone    de
       traduction de Debian.

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