Pb de printf() dans la console que je veux avec MOS
7 sujets de 1 à 7 (sur un total de 7)
-
Bon voilà mon pb:
Contexte:
J’ai un programme qui utilise la stdio classique du langage C.
Je veux ouvrir dans mon programme lancé par un icon (donc en mode WB) dans la console de mon choix et avoir stdout/stdin/stderr branchés sur cette console.
Pb:
J’arrive à ouvir ma console avec un:
fd = open(« CON:xxx », O_RDWR) (libc)
ou
fh = Open(« CON:xxx », MODE_READWRITE) (amigaos).
Mais j’ai jamais pu brancher mes printf() dessus !!!
A chaque fois c’est la console définie dans les préférence de Ambient qui s’ouvre! et je n’est pas de contrôle dessus => la fermeture de cette console en cliquant sur le gadget close me bousille la logique de mon programme et provoque l’apparition d’un icon shell sur Ambient, qui si on double click dessus, me provoque un belle quantité de Hits !!
Avec open() j’ai tenté un fdopen(fd, « rwb »), mais il renvois 0.
Avec Open() + après des SelectInput(fh)/SelectOutput(fh) dessus, bah ça fait rien de mieux!
HELP HELP HELP !!!
Il ya l’article qu’il te faut sur gurumed: (merci sara)
http://www.guru-meditation.net/main.php3?root=425
ta startup initialise les flux d’une certaines façon, (remape les flux C standard aux flux amigaOS) et tu peux aprés la startup refaire les liens qui lient les flux aux fenetres. Il y a des exemples dans l’article.
stdin->file
!!! ça me tue !! 😮
c’était ça alors?!!! pfuu une soirée perdue pour ça!
ah si j’avais eu le net!
en tout cas gros merci à toi krabob si ça marche ce soir !
Et un gros merci aussi à sara pour l’article sur Gurumet.. où j’ai quand même chercher pour pas trouver et passer à côté finalement !!
(PS: j’aurai jamais deviner à chercher les histoires de printf dans la catégorie multi-tâches ! :o))
Bon je viens de zieuté la stdio.h dans gg:includestd/ du SDK de MOS…
… bah y a pas de champ ‘file’ pour le type ‘FILE’ !!!
Par contre y a un champs _file:
short _file; /* fileno, if Unix descriptor, else -1 */
Vu que c’est un descripteur unix je pense que je vais mettre celui donné par la fonction open(). Je test cela ce soir!
Si ça marche faudra que je comment sur gurumed !
sarag a écrit :
Regarde plutôt ce passage là dans l’article (dernière section de code) :
freopen(« CON:80/450/798/250/Alister Output/CLOSE/AUTO », « w », stdout); // Ouverture d’une deuxieme console, et association avec stdout
Dis nous si c’est bon !
Oui certe, mais faudra que je vérifie aussi si on peut faire:
freopen(« CON:80/450/798/250/Alister Output/CLOSE/AUTO », « rw », stdout);
stdin = stderr = stdout;
!!
J’ai tester hier soir et j’ai enfin réussi à avoir ce que je voulais:
#define DEFAULT_CONSOLE « CON:100/100/640/480/Gros Quick/CLOSE »
(…)
freopen(DEFAULT_CONSOLE, « w+ », stdout);
stdin = stderr = stdout;
(…)
Et surtout pas de wait ou auto dans les options de la console!
Sinon CON: attend un retour de je sais pas quoi…alors que votre programme est fermé (je pense qu’il faut certainement faire un ReplyMsg() de qq chose sur le port de notre console).
7 sujets de 1 à 7 (sur un total de 7)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Pb de printf() dans la console que je veux avec MOS