2010-01-09 3 views
2

J'écris un éditeur de code simple pour le langage d'assemblage LC3, et j'ai rencontré un petit problème. L'assembleur LC3 génère des informations de base sur l'état de l'assemblage que j'essaie d'afficher dans mon programme après l'avoir lu dans le fichier journal.Comment rediriger stdout et stderr et conserver la commande?

Au départ, je tenté d'utiliser le système() pour appeler l'assembleur de LC3 et de rediriger stdout et stderr vers un fichier, comme ceci:

system("/pathto/lc3as 1> lc3.log 2>&1"); 

Il produit dans le fichier mais ne conserve pas l'ordre de la sortie de l'assembleur.

Je suis venu avec un travail laid qui préserve l'ordre de la sortie, mais implique beaucoup plus d'IO de fichier que je voudrais, et je ne suis pas sûr que cela fonctionnerait dans toutes les situations. Sur cette note, je me demande s'il existe une meilleure solution pour acheminer la sortie à mon programme qui préserve la commande.

+1

Quel système d'exploitation? POSIX-like, Windows ou ..? –

Répondre

1

Une fois que vous redirigez la sortie, les commutateurs de flux de sortie de « chasse d'eau après chaque écriture » au mode « chasse d'eau uniquement lorsque tampon pleine ». Votre sortie stderr va maintenant être complètement désynchronisée avec la sortie stdout. Vous devrez appeler explicitement fflush() vous-même. Peut-être que votre CRT a une fonction pour changer le mode.

Ne manquez pas la fixation de ce. Personne ne redirige jamais les discussions de progrès vers un fichier, seule la sortie de stderr est importante.

+0

Hmm, ouais je suppose que je suis d'accord pour le laisser. Malheureusement, le "chatter" dans le stdout kinda donne quelques informations sur les erreurs aka ce qui se passe l'erreur se passe sur, mais je suppose que les erreurs réelles pourraient être suffisantes. –

Questions connexes