Popen & stdout [Résolu]

Signaler
Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
bonjour,
je fais un popen sur stdout :

fclose(stdout);
stdout = popen(sendmail_path, "w")
....
pclose(stdout);

à la fin je voudrai remettre le stdout à sa valeur par défaut(sortie standard) initiale. comment faire ???

merci pour votre aide

3 réponses

Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
salut pourquoi tu fais fclose(stdout) au début ???

voila ce que je viens de tester:

#include <stdio.h>
int main() {
FILE stdout_save = *(stdout);
FILE *mon_pointeur_de_fichier = fopen("a.txt","w");
*(stdout) = *mon_pointeur_de_fichier;
printf("bonjour voici a.txt");
fclose(stdout);
*(stdout) = stdout_save;
// à la fin de la fonction stdout_save se libère de la mémoire tout seul
}

regarde la définition de la macro stdout pour comprendre:

#define stdin (&_iob[STDIN_FILENO])
#define stdout (&_iob[STDOUT_FILENO])
#define stderr (&_iob[STDERR_FILENO])

on ne peut donc pas changer sa valeur puisque c'est un tableau de FILE et pas un tableau de FILE*
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
re salut

remplace le fclose(stdout); par fflush(stdout);
et rajoute juste après fclose(mon_pointeur_de_fichier);
Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
5 juin 2008
1
salut,
merci pour ton aide.... mais ça ne marche encore comme je le voudrai
je t'explique le problème que rencontre :
j'ai une fonction qui doit envoyer un mail donc ce que je fait c'est affecter le popen(send_mail) pour pouvoir ecrire mon mail en utilisant les fonction de stdio. Et après je dois retourner une valeur en xml_rpc :
return xmlrpc_build_value(env, "s", "mail envoyé");  l'envoie du mail marche mais la valeur que je retourne et null...