Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1369 connectés 

  FORUM HardWare.fr
  Programmation
  C

  processus pere et fils qui affiche un morceau de mot chacun leur tour?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

processus pere et fils qui affiche un morceau de mot chacun leur tour?

n°905785
angelseb
Posté le 23-11-2004 à 16:47:44  profilanswer
 

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:

Code :
  1. #include <stdio.h>
  2. int main(){
  3. char buffer[29],tampon[4],tampon2[4];
  4. int fils,i,k,l,m,n,p,q;
  5. file = fopen("fichier.txt","r" );
  6. fgets(buffer,sizeof(buffer),file);
  7. printf("le message est : %s et la taille de la chaine est de %d caracteres\n",buffer,strlen(buffer));
  8. fclose(file);
  9. k = 0;
  10. l = k + 4;
  11. p = 4;
  12. q = p + 4;
  13. if((fils=fork()==0){
  14.  m = 0;
  15.  for(i = k; i < l; i++){
  16.   tampon[m] = buffer[i];
  17.   m++;
  18.  }
  19.  k = l + 4;
  20.  l = k + 4;
  21.  tampon[m]='\0';
  22.  printf("Hello pere; mon message est : %s",tampon);
  23. }
  24. else
  25. {
  26.  n = 0;
  27.  for(i = p; i < q; i++){
  28.   tampon2[n] = buffer[i];
  29.   n++;
  30.  }
  31.  p = q + 4;
  32.  q = p + 4;
  33.  tampon[n]='\0';
  34.  printf("Hello fils; mon message est : %s",tampon2);
  35. }
  36.         printf("l vaut %d et q vaut %d\n",l,q);
  37. }


 
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 :D


Message édité par angelseb le 23-11-2004 à 19:36:06
mood
Publicité
Posté le 23-11-2004 à 16:47:44  profilanswer
 

n°908078
miniserveu​r
Dual Screen
Posté le 25-11-2004 à 22:52:45  profilanswer
 
n°908311
niouts
Forums =&gt; Entre-Aide !!
Posté le 26-11-2004 à 11:16:49  profilanswer
 

C'est Super comme question !!  :bounce:  
 
En tout cas, www.uvhc.fr je suis d'accord  :pt1cable:
et peut-être même que l'on peut rajouter "ISTV"... :p


Message édité par niouts le 26-11-2004 à 11:18:44
n°908547
elbelereux
Posté le 26-11-2004 à 15:09:09  profilanswer
 

y'en a du monde ici qui est en iup2 gmi :D

n°908556
spokup
Posté le 26-11-2004 à 15:12:51  profilanswer
 

oui

n°908712
elbelereux
Posté le 26-11-2004 à 17:39:44  profilanswer
 


de l' ISTV ca seré marrant  :p  
 
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 ...
 
@+


Message édité par elbelereux le 26-11-2004 à 17:40:48
n°908749
Sve@r
Posté le 26-11-2004 à 18:56:19  profilanswer
 

Angelseb a écrit :


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?


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 :


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?


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 :


PS: dsl d'être si nul :D


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.


Message édité par Sve@r le 26-11-2004 à 19:25:36
n°915348
miniserveu​r
Dual Screen
Posté le 05-12-2004 à 22:37:52  profilanswer
 

ISTV en force !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  processus pere et fils qui affiche un morceau de mot chacun leur tour?

 

Sujets relatifs
processus, pipes, et chaîne en majusculeEnvoyer sur stdin, récupérer stdout, d'un processus crée
[C]Intercepter les donnees ecrites par un processusRecuperer un morceau de chaine
Pb : IP qui s'affiche au lieu du nom de domaineNombre maximum de fichiers ouverts par processus
[xml+PHP] parser xml avec php, petit pb: ça n'affiche que des chiffres[C] tour hanoi
[Serveur en C ] pb de processus zombies[HTML/ASP] 2 pages identiques qui s'affiche pas pareil, pk ?!
Plus de sujets relatifs à : processus pere et fils qui affiche un morceau de mot chacun leur tour?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR