POPEN(3) Manuel du programmeur Linux POPEN(3) NOM popen, pclose - Entres/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 crant un tube (pipe(2,8)), excutant un fork(), et en invoquant le shell. Comme un tube est uni- directionnel par dfinition, l'argument type doit indiquer seulement une lecture ou une criture, et non pas les deux. Le flux correspon- dant sera ouvert en lecture seule ou criture seule. L'argument commande est un pointeur sur une chane de caractres, termine par un caractre nul, et contenant une ligne de commande shell. Cette commande est transmise /bin/sh en utilisant l'option -c. L'interprtation en est laisse au shell. L'argument type est un pointeur sur une chane de caractres, ter- mine par un caractre nul, qui doit contenir 'r' pour la lecture ou 'w' pour l'criture. La valeur renvoye par popen() est un flux d'entre/sortie normal, la seule diffrence qu'il doit tre ferm en appelant pclose() la place de fclose(). L'criture dans le flux correspond crire sur l'entre standard de la commande. Le flux de sortie standard de la commande est le mme que celui du processus appelant popen(), moins que la commande le modifie. Symtriquement, la lecture depuis un flux ouvert par popen() correspond lire la sortie standard de la com- mande, et dans ce cas l'entre standard de la commande est la mme que celle du processus appelant popen. Notez que, par dfaut, 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 RENVOYE La fonction popen renvoie NULL si l'appel systme fork(2) ou pipe(2,8)(2) choue, ou s'il n'a pas assez de mmoire. La fonction pclose renvoie -1 si wait4 choue, ou si une autre erreur est dtecte. ERREURS La fonction popen ne remplit pas errno si une allocation mmoire choue. Si les appels fork() ou pipe(2,8)() sous-jacents chouent, errno est correctement rempli. Si l'argument type est invalide, et si cette condition est dtecte, errno contient EINVAL. Si pclose() n'arrive pas obtenir le status du fils, errno contient ECHILD. CONFORMIT POSIX.2 BOGUES Comme l'entre 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 buffer, la posi- tion du flux d'entre de la commande peut tre diffrente de celle attendue. Symtriquement, la sortie d'une commande ouverte en crit- ure peut s'emmler avec celle du processus original. Le second problme peut tre vit en appelant fflush(3) avant popen. Il n'est pas possible de distinguer un chec d'excution du shell lui-mme, d'un chec d'excution d'une commande par le shell, ni mme d'une sortie immdiate de la commande. 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,8)(2), wait4(2), fflush(3), fclose(3), fopen(3), stdio(3), system(3) TRADUCTION Christophe Blaess, 1996-2003. LDP 21 juillet 2003 POPEN(3)