Aide programmes langage C

Aide programmes langage C - C - Programmation

Marsh Posté le 15-06-2007 à 16:32:31    

Bonjour à Tous :)  
 
Je débute en programmation, notre prof nous a donné un programme à analyser, je ne pense pas avoir compris donc je me tourne vers vous pour obtenir de l'aide. Merci par avance
 
voici le code du programme :
 
int main()
{          int fd[2], i=2;
           char ch[100];
           while (i)
          {   pipe(fd);
               if(fork())
              {   close(fd[0]);
                  dup2(fd[1],1);
                  close(fd[1]);
                  break;
              }else
              {    close (fd[1]);
                    dup2(fd[0],0);
                    close(fd[0]);
              }
             i--;
           }
scanf("%s",ch);
printf('%s/n",ch);
exit(0);
}

Reply

Marsh Posté le 15-06-2007 à 16:32:31   

Reply

Marsh Posté le 15-06-2007 à 16:34:18    

Pas de question, pas de réponse.


---------------
Töp of the plöp
Reply

Marsh Posté le 15-06-2007 à 16:41:04    

Ok je me lance mais justement comme je l'ai a mon avis g pas compris le sens du programme.
 
il s'agit d'un echange de communication entre un processus pere et un processus fils via un pipe (tube) par contre il n'y a pas de read no de write, chui perdu.
 

Reply

Marsh Posté le 15-06-2007 à 17:02:23    

Le pere ouvre un tube de communication en utilisant la fonction pipe(fd) ?
si création d'un processus fils je ferme la lecture et j'ecris (quoi je sais pas ) ensuite je ferme en ecriture puis je ferme la boucle avec la commande break.  
Sinon je ferme le canal en ecriture mais j'ouvre en lecture (idem de quoi ?)  
ensuite je ferme la lecture.
Au final affichage des valeurs du tableau ch ????

Reply

Marsh Posté le 15-06-2007 à 17:08:19    

Si je ne m'abuse c'est un manifique deadlock entre 3 processes. Ca m'étonnerait que ce soit ce que le prof voulait.
 
Pas de write effectivement... Mais des dup2 et des scanf/printf. Regarde ce que fait dup2.
 
Edit : ah non pardon en fait ça deadlock pas si tu donnes quelque chose à manger au père.
 
Edit 2 ; si tu veux voir un peu ce qui se passe, remplace le printf par : printf("(%s-%d)\n", ch, getpid());


Message édité par matafan le 15-06-2007 à 17:20:52
Reply

Marsh Posté le 15-06-2007 à 17:21:23    

merci bcp pour ta réponse

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed