Rediriger la sortie standard

Gmrinfo Messages postés 8 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 22 septembre 2004 - 21 sept. 2004 à 16:40
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 - 23 sept. 2004 à 15:55
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 sept. 2004 à 18:37
Passe par un buffer:
sprintf(s, ...);
Puis mets s dans ton mémo
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
21 sept. 2004 à 20:10
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
0
Gmrinfo Messages postés 8 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 22 septembre 2004
22 sept. 2004 à 11:19
- 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.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
22 sept. 2004 à 11:22
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gmrinfo Messages postés 8 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 22 septembre 2004
22 sept. 2004 à 14:05
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 sept. 2004 à 17:48
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)
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
22 sept. 2004 à 18:15
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.....
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 sept. 2004 à 18:56
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
22 sept. 2004 à 19:43
non je suis pas sur, j'ai dit "solution a fouiller"
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 sept. 2004 à 20:00
alors on est ok, j'ajoute recherche "rediriger stdout" sur ce site
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
22 sept. 2004 à 22:53
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/
0
Gmrinfo Messages postés 8 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 22 septembre 2004
23 sept. 2004 à 11:25
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
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 sept. 2004 à 15:55
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/
0
Rejoignez-nous