processus pere et fils qui affiche un morceau de mot chacun leur tour? - C - Programmation
Marsh Posté le 26-11-2004 à 11:16:49
C'est Super comme question !!
En tout cas, www.uvhc.fr je suis d'accord
et peut-être même que l'on peut rajouter "ISTV"...
Marsh Posté le 26-11-2004 à 17:39:44
de l' ISTV ca seré marrant
sinon moi j'ai pas cherché compliqué j'ai fait ca avec un sleep
j'ouvre le fichier en lecture
je fais un fork
le fils attend 1 sec comme ca le pere commence
ensuite pr le pere et le fils
tant que l'on peut lire ds le fichier on affiche les caracteres lu (au max 4) et on fait un sleep (1 seconde est largement suffisante )
et ne pas oublier de fermer le fichier mm s'il se ferme 2 fois une par le pere et une par le fils mais bon ...
@+
Marsh Posté le 26-11-2004 à 18:56:19
Angelseb a écrit : |
Absolument pas. Le pipe sert à transmettre des informations entre 2 processus, pas à les synchroniser. Evidemment, la synchro est induite puisque le processus qui lit reste bloqué jusqu'à ce que le processus qui écrit écrive dans le pipe mais la synchro n'est pas le but du pipe.
Si tu veux faire juste une simple alternance p1/p2, tu peux mettre des "sleep" comme cela a été dit ou, si tu veux vraiment être pro, tu inclus dans ton code des sémaphores avec l'algo suivant
- création/initialisation du sémaphore avant le fork - Initialisation à "1" ("man semget" et "man semctl" )
- Après le fork, tu programmes dans le père et le fils les algo suivant identiques pour les 2 processus
=> prendre le sémaphore (opération -1)
=> travailler
=> rendre le sémaphore (opération +1)
Comme la prise ne se fera que sur l'un des processus, l'autre restera bloqué (un sémaphore ne peut pas être négatif) jusqu'à ce que le processus qui a la main rende le sémaphore.
Angelseb a écrit : |
Parce que, dès que le "fork" est lancé, tout le reste du code se duplique. Tout le "if/else" est dupliqué dans les 2 processus mais chacun d'eux n'exécute que le bloc qui le concerne. Après le "if", la suite du code est exécutée par les 2 processus.
Angelseb a écrit : |
Mieux vaut poser une question et paraître bête 30 sec. que de ne pas la poser et montrer que tu l'es durant toute ta vie.
Marsh Posté le 23-11-2004 à 16:47:44
J'ai un pb que je ne sais pas bien gérer, et déterminer ce qu'il faut que j'utilise.
En fait j'ai un fichier qui contient le message suivant "123456789COUCOULESPETITSAMIS". J'ai alors écris deux processus qui affichent alternativement un message lu à partir de ce fichier.
Je vous file une trace de l'exécution :
Hello père; mon message est : 1234
Hello fils; mon message est : 5678
Hello père; mon message est : 9COU
Hello fils; mon message est : COUL
Hello père; mon message est : ESPE
Hello fils; mon message est : TITS
Hello père; mon message est : AMIS
Voici déjà un bout de mon code:
Ce programme m'affiche pour l'instant :
Hello père; mon message est : 1234
l vaut 12 et q vaut 8
Hello fils; mon message est : 5678
l vaut 4 et q vaut 16
1ère question :
Faut-il utiliser des pipes pour synchroniser le pere et le fils pour qu'entre chaque calcul, l'un affiche sa partie, puis que l'autre processus affiche la sienne et ainsi de suite?
2ème question :
Pourquoi la phrase "l vaut x et q vaut y" s'affiche 2 fois alors qu'elle est située après le if?
PS: dsl d'être si nul
Message édité par angelseb le 23-11-2004 à 19:36:06