Rediriger la sortie standard

Signaler
Messages postés
8
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
22 septembre 2004
-
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
-
J'utilise C++ builder. Je dois utiliser un bout de code écrit en c avec des printf et je voudrais que ca écrive vers par exempe un memo.

Comment je peux faire ? (sans modifier le bout de code). Surement avec des redirections mais je vois pas trop. Aidez moi svp!

En France on n'a pas de pétrole mais on a des idées

13 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Passe par un buffer:
sprintf(s, ...);
Puis mets s dans ton mémo
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
const int fd = Open (argv [1], O_WRONLY | O_CREAT | O_TRUNC, 0777);
Dup2 (fd, 1);
Close (fd);

ca c'est sous unix, et a partir de la des que tu ecris ds cout, tu ecris ds ton fichier argv [1], regarde les equivalents de dup ou dup2, open et close sous windows, ca peut peut-etre marcher (ds la table des files descriptors, on a tjs 0 clavier, 1 sortie std, 2 sortie std d'erreur) faudrait que tu vois si tu peux faire un truc du meme genre sous windows, je crois ke au moins open et close on t leurs equivalents, a toi de fouiller paske la je maitrise pas trop
Messages postés
8
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
22 septembre 2004

- vecchio56 merci mais si j'utilise sprintf je modifie le code alors que je ne dois pas y toucher merci quand même

- leprov j'avais bien pensé à cela mais ca ca écrit dans un fichier moij'aimerais que ca écrive dans un Tmemo en direct a chaque fois qu'un printf ce fait.
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
ds ce cas:
const int fd = Open (argv [1], O_WRONLY | O_CREAT | O_TRUNC, 0777);
const int fd2 = Open (argv [2], O_WRONLY | O_CREAT | O_TRUNC, 0777);
Dup2 (fd, fd2);
Close (fd);

avec fd2 le fd de ton memo
Messages postés
8
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
22 septembre 2004

je ne sais pas comment avec le fd de mon memo et de plus je ne vois pas pourquoi ton code redirigerai la sortie standard (fd =1 ) sur mon memo. Je te rappelle que j'aimerais que cela ce fasse avec un printf

En France on n'a pas de pétrole mais on a des idées
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
leprov > Gmrinfo est sous builder, meme si ya le support de posix, il serais plus coherent de passer par l'api windows win32 ou le rt de builder (qui au final appel les fonction de l'api)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
peut-etre djl, mais etant donné ke je sais pas faire avec les apis, je donne une solution que je connais. comment marche le truc?
bah tu dis que le pointeur de fd de ta sortie standard pointe finallement sur le fd de ton memo, ce qui fait que tout ce qui sort avec printf sort finallement ds ton fichier.
sinon methode tte bete: tutilise printf dc je suppose ke cest une appli console, fait un batch genre

@echo off
ton_prog > fich

c'est surement pas ce que tu attends de ton prog, mais en attendant une meilleure solution, et si tu as besoin de faire tourner ton prog en attendant mieux.....
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
je connais pas non plus builder & co, mais t'es sur qu'un memo ca a son petit fd ? :D

faut non plus melanger les tuyauterie
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
non je suis pas sur, j'ai dit "solution a fouiller"
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
alors on est ok, j'ajoute recherche "rediriger stdout" sur ce site
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Sinon il y a freopen, qui permet de rediriger un fichier vers un autre fichier ou vers la console (grâce à la valeur spéciale "CON" dans le style :
freopen("CON", "w", stdout);
freopen("CON", "r", stdin);
freopen("CON", "w", stderr);

Mais pour rediriger vers ton TMemo, déjà faut voir si c'est possible de rediriger vers une chaîne de caractères, et si c'est le cas alors là faudrait trouver un moyen d'associer cette chaîne à ton TMemo...

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/
Messages postés
8
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
22 septembre 2004

Je crois que vous avez bien compris mon problème

quelques petites précisions :
- ce n'est pas une appli console donc en fait quand il y a un printf (puisqu''il y en a plusieurs en fait) ca "n'apparait pas" dans mon programme.
- les printf c'est pas moi qui les ai mis c'est encore une fois une contrainte imposée.
- j'aimerais que l'affichage des chaines de caractères se fasse en direct dans mon memo après chaque printf.
- je ne crois pas qu'on puisse lier un descripteur de fichier avec Un TMEMo de builder

Mais je crois crois bien que lorsque qu'on écrit sur std out, il doit y avoir un buffer de réception, peut être existe t il un handler qui puisse se déclencher à la réception des caractères envoyé par printf dans ce cas là je redéfinis le handler et mets un
TMemo->Add(chaine de caractères) et le tour est joué. Mais je sais pas si ce handler ou équivalent existe.

En France on n'a pas de pétrole mais on a des idées
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Ouais on avait bien compris le pb, presonnellement je t'ai dit tout ce que je savais...il te reste Google ou virer tes printfs ^^

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/