2010-08-14 4 views
1

Je dois exécuter tout autre programme de mon programme C qui est continuouslly donner des messages (résultat intermédiaire) sur les messages stdout.These (résultat intermédiaire) je peux récupérer après exec termine son exécution (autre programme est mis fin), mais mon problème est que si l'exécution de la commande exec est en cours, alors comment récupérer ces messages (résultat intermédiaire) ligne par ligne? Basé sur ces résultats intermédiaires je dois fournir quelques entrées trop à la commande exec (fournir une entrée à un autre programme), comment faire cela?comment lire les résultats intermédiaires de la commande exec parallèlement à l'exécution de la commande exec en C?

Répondre

3

Voir pipe(2). Utilisez le descripteur de fichier d'entrée pour le stdin du processus enfant qui appelle exec.

Pour déplacer le descripteur de fichier, ne

dup2(my_pipe[0], stdin); 

chez l'enfant après la fourche.

Ou, utilisez popen(3) comme Chao suggère.

+0

je l'ai fait de manière similaire (tuyau utilisé pour stdout), mais dans ce cas je suis en mesure de lire tuyau uniquement lorsque la commande se termine exec (autre exécution du programme se termine), mais je ne suis pas en mesure de récupérer des résultats intermédiaires en parallèle alors que la commande exec exécution en cours – joseph

+0

@joseph, Vous devez 'fork 'votre processus afin que le processus parent puisse envoyer et recevoir des informations au processus' exec''d. Ou est-ce que je vous ai mal compris? – strager

+0

J'ai fork mon processus, dans le processus enfant d'abord j'utilise pipe pour dupliquer stdout (dup2 (my_pipe [1], stdout);) puis j'exécute la commande exec et dans le processus parent je lis le résultat intermédiaire dans la boucle (en utilisant la commande read sur my_pipe [0]) pendant le débogage j'ai trouvé que read ne donne pas d'o/p avant que exec ne termine (il est bloqué sur la commande de lecture si exec n'a pas fini) mais j'ai besoin de ces résultats intermédiaires parallèlement (dès que exec donne ce résultat intermédiaire) – joseph

4

popen(3)popen(3) démarre un programme, vous donnant un FILE* que vous pouvez utiliser pour lire la sortie du processus.

Questions connexes