Popen & stdout

Résolu
dacor Messages postés 40 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 5 juin 2008 - 31 janv. 2007 à 13:52
dacor Messages postés 40 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 5 juin 2008 - 1 févr. 2007 à 09:59
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

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
31 janv. 2007 à 21:59
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*
3
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
31 janv. 2007 à 22:08
re salut

remplace le fclose(stdout); par fflush(stdout);
et rajoute juste après fclose(mon_pointeur_de_fichier);
0
dacor Messages postés 40 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 5 juin 2008
1 févr. 2007 à 09:59
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...
0
Rejoignez-nous