[C] Un problème de processus/pipe

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Depuis hier matin je suis bloqué avec ma fonction affiche. Celle-ci prend un argument une commande de l’utilisateur (par exemple : ls) puis affiche sdout et stderr dans deux couleurs différentes. Le truc difficile c’est que sdout et stderr peuvent être entremêlé. Du coup je fais deux processus enfants chacun s’occupant de l’affichage de stdout et stderr. J’obtiens la fonction suivante :

ou afficheCouleur affiche en couleur les données reçus par le descripteur de fichiers en argument (à l’aide de read et write) et ou executionCommande execute la commande d’un utilisateur à l’aide de execvp.

Le problème que j’ai c’est que par exemple si l’utilisateur rentre : ls la fonction affiche print deux fois le résultat de ls en vert au lieu d’une. J’ai aussi l’impression que les erreurs s’affichent en vert et pas en rouge…

J’ai un peu tout essayé et je ne vois pas d’ou vient le problème. Je suppose que ça vient de mes pipes mais ou ?

Merci beaucoup.

+0 -0

Aaaah mais oui tu as raison ! J’avais complètement loupé ça.

Du coup j’en profite pour demander : est ce que ça sert à quelque chose les kill que je mets à la fin de ma fonction ?

Je les ai mis en tatonant et en essayant de trouver une solution à mon problème mais en les enlevant et en créant bien deux processus au lieu de trois ça marche correctement.

Du coup est ce qu’il faut que je mette les kill ou des wait(NULL) ? Au cas ou par exemple l’un des processus ne finit pas ?

Comment ça au cas un processus ne se finit pas ?

Tu crains d’avoir fait une boucle infinie ?

Non c’est inutile de kill mais les wait sont utiles si tu ne veux pas te retrouver avec des processus zombies.

  • wait tu attends sagement la fin du processus pour nettoyer derrière.
  • kill tu tues le processus, même s’il avait prévu de faire des trucs encore. Idéal pour corrompre des données.
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte