popen(3) Library Functions Manual popen(3) NOM popen, pclose -- Tube entrant ou sortant d'un processus BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include FILE *popen(const char *commande, const char *type); int pclose(FILE *flux); Exigences de macros de test de fonctionnalites 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 creant un tube (pipe), en executant un fork() et en invoquant l'interpreteur de commande. 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 commande est un pointeur sur une chaine de caracteres terminee par un caractere NULL, et contenant une ligne de commande de l'interpreteur de commandeshell. Cette commande est transmise a /bin/sh en utilisant l'option -c. L'interpretation en est laissee a l'interpreteur. L'argument type est un pointeur sur une chaine de caracteres terminee par un caractere NULL 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 sous-jacent ; 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 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 de bloc. 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 RENVOYEE popen() : en cas de succes la fonction renvoie un pointeur vers un flux ouvert pouvant etre utilise pour lire ou ecrire dans le tube si les appels fork(2) ou pipe(2) echouent ou si la fonction ne peut pas allouer assez de memoire, la fonction renvoie NULL. pclose() : en cas de succes, la fonction renvoie le code de retour de la commande ; si wait4(2) renvoie un erreur ou si une autre erreur est detectee, -1 est renvoye. En cas d'erreur, les deux fonctions definissent errno pour indiquer l'erreur. ERREURS La fonction popen ne definit pas errno si une allocation memoire echoue. Si les appels fork(2) ou pipe(2) sous-jacents echouent, errno est defini pour indiquer l'erreur. Si l'argument type n'est pas valable et si cette condition est detectee, errno contient EINVAL. Si pclose() n'arrive pas a obtenir l'etat de l'enfant, errno contient ECHILD. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |popen(), pclose() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ VERSIONS La valeur << e >> pour type est une extension Linux. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. AVERTISSEMENTS Lisez attentivement les avertissements dans system(3). 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 de la 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) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais et Jean- Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.9.1 2 mai 2024 popen(3)