Redirection stdout sur un FILE

Redirection stdout sur un FILE - C - Programmation

Marsh Posté le 12-06-2012 à 00:16:40    

Bonjour à tous,
 
Voilà, j'ai une fonction qui affiche tout bêtement un printf(), et il faut que la sortie se fasse dans un fichier.
 
J'ai fait des recherches sur freopen, fd/dup, mais je n'ai trouvé à chaque fois que des solutions qui prennent en paramètre le nom en char.
 
Moi j'en voudrais une qui prenne un argument de type FILE!!
 
Quelqu'un peut-il m'aider?  :(

Reply

Marsh Posté le 12-06-2012 à 00:16:40   

Reply

Marsh Posté le 12-06-2012 à 03:14:43    

#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
 

Citation :

dup : duplique un descripteur et renvoie le premier descripteur libre dans la table du processus
int fd = open("tutu", O_WRONLY|O_CREAT);
close(STDOUT_FILENO);
dup(fd); // duplique sur 1 puisque après la fermeture c'est le premier numéro de fd libre
// dup duplique pour le descripteur 1 les infos de fd, qui est donc ensuite à l'état ouvert, comme fd.
close(fd); // ne sert plus a rien
printf("tutu" ); // ecrit dans tutu (maintenant associé seulement au descripteur 1)


Citation :

dup2 : permet de choisir le descripteur (et écraser l’ancien)
int fd = open("tutu", O_WRONLY|O_CREAT);
dup2(fd, STDOUT_FILENO); // fait un close sur STDOUT_FILENO puis le dup
close(fd); // ne sert plus a rien  
printf("tutu" ); // ecrit dans tutu


 
et par exemple, avec réversibilité:
int fd = open("tutu", O_WRONLY|O_CREAT);
int fd1 = dup(STDOUT_FILENO); // on duplique pour sauvegarder l'état
dup2(fd, STDOUT_FILENO);  
printf("tutu" );  
.....
dup2(fd1, STDOUT_FILENO); // On rétablit l'état de stdout
close(fd1);
close(fd);
 
Bon si tu es sous Windows, il doit (peut-être) y avoir des équivalents: http://www.suacommunity.com/dictionary/dup-entry.php
 
A+,


Message édité par gilou le 12-06-2012 à 08:57:18

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed