POPEN(3)           Manuel du programmeur Linux           POPEN(3)


NOM
       popen, pclose - Entrées/Sorties pour un processus.

SYNOPSIS
       #include <stdio.h>

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

       int pclose (FILE *stream);

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.

       L'argument commande est un pointeur sur une chaîne de car­
       actè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 mode est un pointeur sur  une  chaîne  de  car­
       actères,  terminée par un caractère nul, qui doit contenir
       à 'r' pour la lecture ou 'w' pour l'écriture.

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

       La  fonction  pclose attend que le processus correspondant
       se termine, et renvoie alors le statut  de  sortie  de  la
       commande, comme en utilisant wait4.

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 échoue, ou  si  une
       autre erreur est détectée.




BSD                      14 Décembre 1998                       1





POPEN(3)           Manuel du programmeur Linux           POPEN(3)


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

       Si  pclose()  n'arrive  pas  à  obtenir le status du fils,
       errno contient ECHILD.

CONFORMITÉ
       POSIX.2

BUGS
       Comme l'entrée standard d'une commande ouverte en  lecture
       partage son pointeur de position dans le flux avec le pro­
       cessus  appelant  popen(),  si  le  processus  original  a
       effectué  des  lectures  en  buffer,  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  com­
       mande. Le seul indice est un code de retour de 127.

HISTORIQUE
       Des  fonctions  popen()  et pclose() sont apparues dans la
       Version 7 d'AT&T UNIX.

VOIR AUSSI
       fork(2), sh(1), pipe(2), wait4(2),  fflush(3),  fclose(3),
       fopen(3), stdio(3), system(3).


TRADUCTION
       Christophe Blaess, 1997.

















BSD                      14 Décembre 1998                       2