[C] Tablures et tuyaux
Stéphanie
-
crabs Messages postés 908 Date d'inscription Statut Membre Dernière intervention -
crabs Messages postés 908 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'essaye de faire un exo mais je n'arrive pas à le démarrer.
Si vous pouviez m'indiquer comment m'y prendre.
Merci d'avance
j'essaye de faire un exo mais je n'arrive pas à le démarrer.
Si vous pouviez m'indiquer comment m'y prendre.
Merci d'avance
On veut tester une fonction de génération aléatoire d'entiers (allea) et l'on veut savoir si la somme des nombres entiers produits est égales à la somme des nombres impairs produits et ce pour 10 000 tirages. Le prototype de la fonction est : int allea(); nous est fournis dans une librairie partagée allea.so Le processus P1 écrit 10 000 nombres produit par allea sur la sortie standart. Le processus P2 lit des nombres sur l'entrée standart et écrit les nombres pairs sur la sortie standart et les nombres impairs sur la sortie erreur standart. Les processus P3 et P4 somment l'ensemble des nombres lus sur l'entrée standart et écrivent la somme sur la sortie standart. Le processus P5 lit 2 nombres sur l'entrée standart et les comparent. Si ils sont égaux, l'exit status sera zéro et un si ils sont différents. 1)Ecrire le programme de l'executable Pi 2)Ecrire le programme qui lance l'ensemble des processus, créer les tubes et réalise les bonnes connections avec fermeture de tous les descripteurs inutiles. 3)Ecrire les commandes de compilation.
3 réponses
Salut,
Commences par faire un schéma en dessinant chaque processus par une patate
ou tu repères pour chaque processus l'entrée standard (sur la gauche) et les
sorties standard et d'erreur sur la droite.
Ensuite tu représentes les flux unidirectionnels de dialogue (une sortie d'un
processus vers l'entrée d'un autre) en indiquant ce qui passe : un nombre,
un nombre pair, etc...
Par la suite, le programme qui va lancer tout-ça devra s'occuper de créer
les tubes et d'affecter au besoin les entrées et les sorties sur les tubes (en réalité
c'est une duplication de file descripteur) :
Si tu es sous UNIX :
- créer un processus fork()
- créer un tube : pipe()
- dupliquer des file descriptors : dup() ou dup2()
- se remplacer par un autre processus : exec()
L'avantage d'une telle solution c'est qu'il n'y a que le lanceur qui est
complexe, les autres c'est des processus simples.
A+, crabs
Commences par faire un schéma en dessinant chaque processus par une patate
ou tu repères pour chaque processus l'entrée standard (sur la gauche) et les
sorties standard et d'erreur sur la droite.
Ensuite tu représentes les flux unidirectionnels de dialogue (une sortie d'un
processus vers l'entrée d'un autre) en indiquant ce qui passe : un nombre,
un nombre pair, etc...
Par la suite, le programme qui va lancer tout-ça devra s'occuper de créer
les tubes et d'affecter au besoin les entrées et les sorties sur les tubes (en réalité
c'est une duplication de file descripteur) :
Si tu es sous UNIX :
- créer un processus fork()
- créer un tube : pipe()
- dupliquer des file descriptors : dup() ou dup2()
- se remplacer par un autre processus : exec()
L'avantage d'une telle solution c'est qu'il n'y a que le lanceur qui est
complexe, les autres c'est des processus simples.
A+, crabs
Bonjour,
Ce que je ne comprends pas c'est comment on récupère les chiffres de la fonction allea pour les redirigés sur la sortie standart ou erreur standart selon le chiffre que l'on obtient
Ce que je ne comprends pas c'est comment on récupère les chiffres de la fonction allea pour les redirigés sur la sortie standart ou erreur standart selon le chiffre que l'on obtient