programmation système en c sous linux

programmation système en c sous linux - C - Programmation

Marsh Posté le 17-03-2014 à 15:29:02    

svp j'ai besoin d'aide je sais pas comment utiliser le break dans l'exercice suivant:
 
Ecrire un programme qui crée 5 fils en utilisant une boucle for. On remar-
quera que pour que le fils ne crée pas lui-même plusieurs fils, il faut interompre la boucle par
un break dans le fils.
 
voici mon programme:
 
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(void){
 pid_t pid_fils[5];
 int i;
 for(i=0; i<4; i++){
  pid_fils[i]=fork();
  if(pid_fils[i]==-1){
   printf("error" );
   exit(1);
  }
  if(pid_fils[i]==0){
   printf("je suis le fils%d\n", i+1);
  }
 }
return 0;
}

Reply

Marsh Posté le 17-03-2014 à 15:29:02   

Reply

Marsh Posté le 17-03-2014 à 17:04:37    

1 - Utilise la balise de formatage de code pour poster du code, c'est plus lisible
2 - Ton code créé 4 fils et pas 5
3 - J'avoue que je ne comprends pourquoi ton énoncé suppose qu'un fils pourrait créer d'autres fils. Si tu fais 5 fork(), tu vas créer 5 processus enfants du processus qui appelle le fork(), à aucun moment les fils ne crééront de fils dans la boucle for (ou alors tu n'as pas posté tout ton énoncé)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-03-2014 à 21:28:26    

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. int main(void){
  5. pid_t pid_fils[5];
  6. int i;
  7. for(i=0; i<4; i++){
  8.   pid_fils[i]=fork();
  9.   if(pid_fils[i]==-1){
  10.    printf("error" );
  11.    exit(1);
  12.   }
  13.   if(pid_fils[i]==0){
  14.    printf("je suis le fils%d\n", i+1);
  15.    break;
  16.   }
  17. }
  18. return 0;
  19. }


 

Harkonnen a écrit :

3 - J'avoue que je ne comprends pourquoi ton énoncé suppose qu'un fils pourrait créer d'autres fils. Si tu fais 5 fork(), tu vas créer 5 processus enfants du processus qui appelle le fork(), à aucun moment les fils ne crééront de fils dans la boucle for (ou alors tu n'as pas posté tout ton énoncé)


 
Je n'ai programmé pas en C depuis fort longtemps mais le fork copie la mémoire du processus et place le pointeur d'exécution du nouveau processus exactement après le fork. Dans ce cas-ci, chaque fils commence en pleine boucle for et hérite de la valeur de i du parent lors du fork.
Dans le cas sans break, cela peut produire une arborescence d'environ 4*(4 +1)/2 processus.

Message cité 1 fois
Message édité par czh le 17-03-2014 à 21:34:59
Reply

Marsh Posté le 18-03-2014 à 23:18:54    

Bonjour
 

czh a écrit :

Dans le cas sans break, cela peut produire une arborescence d'environ 4*(4 +1)/2 processus.


 
Beaucoup plus que ça
Le père a une boucle à 5 itérations qui créera 5 fils (ici il n'y en a que 4 mais comme l'énoncé parle de 5 je présuppose que la boucle est corrigée pour faire 5 itérations)
Chaque fils de l'itération n° 1 héritera de cette itération et en créera 4
Chaque petit fils de cette itération en hérite et en crée 3
Ainsi etc donc au final 5! soit 120 fils
 
On passe maintenant au fils de l'itération n° 2 qui en hérite et qui en crée 3
Chaque petit fils va en créer 2
Ainsi etc donc 4! soit 24 fils
 
On arrive maintenant au fils de l'itération n° 3 qui va en créer 2 qui eux-mêmes vont en créer 1 donc au total 6
 
Et etc etc soit au final 5! + 4! + 3! + 2! + 1! soit 153 processus...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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