Rediriger stderr stdout
Résolu/Fermé
Utilisateur anonyme
-
27 juin 2008 à 01:25
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 avril 2010 à 08:19
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 avril 2010 à 08:19
A voir également:
- La page que vous consultiez essaie de vous rediriger vers
- Supprimer une page word - Guide
- Word numéro de page 1/2 - Guide
- Traduire la page - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
7 réponses
Utilisateur anonyme
27 juin 2008 à 14:28
27 juin 2008 à 14:28
Je viens de trouver un document parlant justement de ça.
je vous le transmet je n'ai pas le temps de regarder sa , je ferais sa ce soir
http://operatingcomputer.fr/n869.pdf
rubrique >> 7.19
je vous le transmet je n'ai pas le temps de regarder sa , je ferais sa ce soir
http://operatingcomputer.fr/n869.pdf
rubrique >> 7.19
Utilisateur anonyme
27 juin 2008 à 16:55
27 juin 2008 à 16:55
j'ai trouver avec freopen() ceci :
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f = freopen("redir.txt","w",stdout) && freopen("redir.txt","w",stderr);
if(f==NULL)
return EXIT_FAILURE;
system("Hello world\n");
return EXIT_SUCCESS;
}
ce qui me permet de rediriger le flux dans redir.txt
il reste maintenant a rediriger le flux =D dans une variable
Je pense me tourner vers un pipe() ou quelquechose du même genre
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f = freopen("redir.txt","w",stdout) && freopen("redir.txt","w",stderr);
if(f==NULL)
return EXIT_FAILURE;
system("Hello world\n");
return EXIT_SUCCESS;
}
ce qui me permet de rediriger le flux dans redir.txt
il reste maintenant a rediriger le flux =D dans une variable
Je pense me tourner vers un pipe() ou quelquechose du même genre
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 juin 2008 à 08:41
27 juin 2008 à 08:41
Pas évident.
J'avais essayé à une époque de faire ça, et j'avais vite renoncer, préférant des solutions plus tordu.
Le plus logique et le plus simple serai de faire :
stdout=fopen(...);
Mais je crois que malheuresement ça ne fonctionne pas.
Je ne voi pas en quoi fork() pourrai t'aider.
popen() peux être pas mal, en revanche, avec la commande "cat".
J'avais essayé à une époque de faire ça, et j'avais vite renoncer, préférant des solutions plus tordu.
Le plus logique et le plus simple serai de faire :
stdout=fopen(...);
Mais je crois que malheuresement ça ne fonctionne pas.
Je ne voi pas en quoi fork() pourrai t'aider.
popen() peux être pas mal, en revanche, avec la commande "cat".
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 juin 2008 à 15:27
27 juin 2008 à 15:27
bien vu !!
d'après la note de bas de page freopen() sers à faire ça : réorienté les flux.
The freopen function Synopsis 1 #include <stdio.h> FILE *freopen(const char * filename, const char * mode, FILE * restrict stream); Description 2 The freopen function opens the file whose name is the string pointed to by filename and associates the stream pointed to by stream with it. The mode argument is used just as in the fopen function.215) 3 Iffilename is a null pointer, the freopen function attempts to change the mode of the stream to that specified by mode, as if the name of the file currently associated with the stream had been used. It is implementation-defined which changes of mode are permitted (if any), and under what circumstances. 4 The freopen function first attempts to close any file that is associated with the specified stream. Failure to close the file is ignored. The error and end-of-file indicators for the stream are cleared. Returns 5 The freopen function returns a null pointer if the open operation fails. Otherwise, freopen returns the value of stream. 215) The primary use of the freopen function is to change the file associated with a standard text stream (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value returned by the fopen function may be assigned.(extrait de la page 276)
d'après la note de bas de page freopen() sers à faire ça : réorienté les flux.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
27 juin 2008 à 17:05
27 juin 2008 à 17:05
Sinon, l'idéal c'est de fermer stdout puis d'ouvrir un nouveau fichier.
Exemple:
En faisant des printf, ça écrira dans le fichier car l'ouverture de ce fichier prend le premier descripteur libre: 1 qui est stdout.
Au fait c'est pareil avec stdin(descripteur 0) et stderr (descripteur 2).
Exemple:
int file; close(1); file = open("mon_fichier", O_WRONLY);
En faisant des printf, ça écrira dans le fichier car l'ouverture de ce fichier prend le premier descripteur libre: 1 qui est stdout.
Au fait c'est pareil avec stdin(descripteur 0) et stderr (descripteur 2).
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
>
Utilisateur anonyme
27 juin 2008 à 17:10
27 juin 2008 à 17:10
Ah voui j'avais oublié le sujet principal :-D
Il faut que tu couples ça avec mmap qui te permet de mapper un fichier en mémoire
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/mmap.2.html
Même pas besoin de coupler avec ce que j'ai évoqué avant en fait d'ailleurs. Juste utiliser mmap en projetant le descripteur de fichier qu'il faut en mémoire.
Il faut que tu couples ça avec mmap qui te permet de mapper un fichier en mémoire
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/mmap.2.html
Même pas besoin de coupler avec ce que j'ai évoqué avant en fait d'ailleurs. Juste utiliser mmap en projetant le descripteur de fichier qu'il faut en mémoire.
Utilisateur anonyme
>
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
27 juin 2008 à 17:45
27 juin 2008 à 17:45
oui mais si on utilise mmap() on est obligé de créer un fichier
et le but est justement de ne pas créer de fichier
sinon sa serai trop facile
=D
et le but est justement de ne pas créer de fichier
sinon sa serai trop facile
=D
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
>
Utilisateur anonyme
27 juin 2008 à 17:46
27 juin 2008 à 17:46
Non. Tu rediriges stdout: le descripteur 0 en tant que que paramètre fd.
Utilisateur anonyme
>
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
27 juin 2008 à 18:02
27 juin 2008 à 18:02
euh... la pour le mmap je rame
je vois pas
un petit exemple serais le bienvenu
=S
je vois pas
un petit exemple serais le bienvenu
=S
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
30 juin 2008 à 08:39
30 juin 2008 à 08:39
question con, as tu essayé "fscanf(stdout,"%s",na);" ?
même si ça ne semble pas possible comme ça.
ou alors avec reopen() en modifiant les attributs genre :
reopen(0,"w+",stdout);
Une autre idée, utilisé les sockets, pas en TCP/IP, mais avec un protocole interne. Je te dit ça, car j'ai vaguement lu un truc dans le genre dans la doc des socket, mais je ne pourai pas en dire plus.
même si ça ne semble pas possible comme ça.
ou alors avec reopen() en modifiant les attributs genre :
reopen(0,"w+",stdout);
Une autre idée, utilisé les sockets, pas en TCP/IP, mais avec un protocole interne. Je te dit ça, car j'ai vaguement lu un truc dans le genre dans la doc des socket, mais je ne pourai pas en dire plus.
27 juin 2008 à 17:17
http://www.operatingcomputer.fr/doc/coding/c/n869.pdf
20 avril 2010 à 17:32
21 avril 2010 à 08:19