Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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 fonctionnalites pour la glibc (consultez
feature_test_macros(7)) :
popen(), pclose() :
_POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE || _BSD_SOURCE ||
_SVID_SOURCE
DESCRIPTION
La fonction popen() engendre un processus en creant un tube (pipe),
executant un fork(), et en invoquant le shell. Comme un tube est
unidirectionnel par definition, l'argument type doit indiquer seulement
une lecture ou une ecriture, et non pas les deux. Le flux correspondant
sera ouvert en lecture seule ou ecriture seule.
L'argument command est un pointeur sur une chaine de caracteres,
terminee par un caractere nul, et contenant une ligne de commande
shell. Cette commande est transmise a /bin/sh en utilisant l'option -c.
L'interpretation en est laissee au shell. L'argument type est un
pointeur sur une chaine de caracteres, terminee par un caractere nul,
qui doit contenir soit la lettre << r >> pour la lecture soit la lettre
<< w >> pour l'ecriture. Depuis la glibc 2.9, ce parametre peut
egalement contenir la lettre << e >>, qui a pour consequence
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 renvoyee par popen() est un flux d'entree-sortie normal, a la
seule difference qu'il doit etre ferme en appelant pclose() a la place
de fclose(3). L'ecriture dans le flux correspond a ecrire sur l'entree
standard de la commande. Le flux de sortie standard de la commande est
le meme que celui du processus appelant popen(), a moins que la
commande le modifie. Symetriquement, la lecture depuis un flux ouvert
par popen() correspond a lire la sortie standard de la commande, et
dans ce cas l'entree standard de la commande est la meme que celle du
processus appelant popen().
Notez que, par defaut, 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'etat de sortie de la commande, comme en utilisant
wait4(2).
VALEUR RENVOY'EE
La fonction popen() renvoie NULL si l'appel systeme fork(2) ou pipe(2)
echoue, ou s'il n'a pas assez de memoire.
La fonction pclose() renvoie -1 si wait4(2) echoue, ou si une autre
erreur est detectee.
ERREURS
La fonction popen ne remplit pas errno si une allocation memoire
echoue. Si les appels fork(2) ou pipe(2) sous-jacents echouent, errno
est correctement rempli. Si l'argument type est invalide, et si cette
condition est detectee, errno contient EINVAL.
Si pclose() n'arrive pas a obtenir l'etat du fils, errno contient
ECHILD.
CONFORMIT'E
POSIX.1-2001.
La valeur << e >> pour type est une extension Linux.
BOGUES
Comme l'entree 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 effectue des lectures en tampon, la position
du flux d'entree de la commande peut etre differente de celle attendue.
Symetriquement, la sortie d'une commande ouverte en ecriture peut
s'emmeler avec celle du processus original. Le second probleme peut
etre evite en appelant fflush(3) avant popen().
Il n'est pas possible de distinguer un echec d'execution du shell
lui-meme, d'un echec d'execution d'une commande par le shell, ni meme
d'une sortie immediate 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.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Nicolas
Francois et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
GNU 3 fevrier 2010 POPEN(3)