programmation système en c sous linux - C - Programmation
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é)
Marsh Posté le 17-03-2014 à 21:28:26
Code :
|
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.
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...
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;
}