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

  FORUM HardWare.fr
  Programmation
  C

  precessus(fork) --->> explication

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

precessus(fork) --->> explication

n°511096
zouzouille
Posté le 09-09-2003 à 17:28:43  profilanswer
 

On ma donner ce petit programme, mais jene vois pas ce qu'il fait, on pourrait m'expliquer svp ,??
 
 
 
 
void main(void)
{
int i;char txt[40];
write(STDOUT_FILENO,"programme debut<n",16);
for (i=1;i<3;i++)
{
 if((fork())==0)
 {
  sprintf(txt,"        " );
  sprintf(txt,"\nprocessus fils n %d, %d",i,getpid());
  write(1,txt,40);
 }
 else
 {
  sprintf(txt,"        " );
  sprintf(txt,"\nprocessus pere i= %d, %d",i,getpid());
  write(1,txt,40);
 }
}
sprintf(txt,"                                       " );
sprintf(txt,"fin du processus %d",getpid());
write(1,txt,40);
}
   
resultat
********
programme debut<
processus fils n 1, 22352
processus fils n 2, 22610 fin du processus 22610
processus pere i= 2, 22352 fin du processus 22352
processus pere i= 1, 21838
processus fils n 2, 22612 fin du processus 22612
processus pere i= 2, 21838 fin du processus 21838

mood
Publicité
Posté le 09-09-2003 à 17:28:43  profilanswer
 

n°511175
Taz
bisounours-codeur
Posté le 09-09-2003 à 19:09:07  profilanswer
 

il crée un processus appelé père qui en engendre un autre appelé fils

n°511186
ffluff
Challenge Everything
Posté le 09-09-2003 à 19:16:25  profilanswer
 

je completerai en disant :
 
fork()==0
=> code éxécuté par le processus père
fork()!=0
=> code du fils

n°511187
SquiZZ
Posté le 09-09-2003 à 19:16:29  profilanswer
 

zouzouille a écrit :

On ma donner ce petit programme, mais jene vois pas ce qu'il fait, on pourrait m'expliquer svp ,??


 
 
essaie d'utiliser les balises "cpp" de ce forum (bouton c/c++ quand tu composes ton message) , c'est plus joli.
 
fork permet de dupliquer un programme.
après l'execution de fork, on se retrouve avec deux programmes identiques en mémoire.
identique ? pas tout à fait. La valeur de retour du fork permet de différencier les deux programmes en cours d'execution.
si le fork a retourné 0, on est dans le processus 'père'
si le fork a retourné quelque chose différent de 0, on est dans le processus fils.
 
 
 

Code :
  1. void main(void)
  2. {


 
bof, ceci est mieux (du point de vue du standard):

Code :
  1. int main(void)
  2. {


 

Code :
  1. int i;char txt[40];


éviter de déclarer plus d'une variable par ligne
 
 

Code :
  1. write(STDOUT_FILENO,"programme debut<n",16);


faute de frappe pour le signe inférieur.
sinon un petit printf aurait suffi.
 

Code :
  1. for (i=1;i<3;i++)
  2. {
  3. if((fork())==0)
  4. {
  5.   sprintf(txt,"        " );
  6.   sprintf(txt,"\nprocessus fils n %d, %d",i,getpid());
  7.   write(1,txt,40);
  8. }


un simple

Code :
  1. printf("\nprocessus fils n %d, %d",i,getpid());


aurait suffi.
 

Code :
  1. else
  2. {
  3.   sprintf(txt,"        " );
  4.   sprintf(txt,"\nprocessus pere i= %d, %d",i,getpid());
  5.   write(1,txt,40);
  6. }
  7. }
  8. sprintf(txt,"                                       " );
  9. sprintf(txt,"fin du processus %d",getpid());
  10. write(1,txt,40);
  11. }


idem.
 
rajouter un petit "return 0; " a la fin pour faire joli et respecter le prototype sdandard du main et c'est déjà mieux.
 
 


resultat
********
programme debut<
processus fils n 1, 22352
processus fils n 2, 22610 fin du processus 22610
processus pere i= 2, 22352 fin du processus 22352
processus pere i= 1, 21838
processus fils n 2, 22612 fin du processus 22612
processus pere i= 2, 21838 fin du processus 21838


 
 
première boucle, après le fork on a deux programmes avec i=1;
un fils et un père.
on aura une ligne "père i=1" et une ligne "fils i=1".
 
ensuite on passe au prochain tour de boucle dans les deux programmes, on a donc i=2.
chaque programme va engendrer un père et un fils lors de l'appel du fork, résultat deux lignes "père i=2" et deux lignes "fils i=2"
 
prochain tour de boucle, i = 3, youpi tout le monde meurt.


Message édité par SquiZZ le 09-09-2003 à 19:17:02

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

  precessus(fork) --->> explication

 

Sujets relatifs
EXPLICATIONComment tuer un processus mis en mémoire avec fork() ??
Feuilles de style et besoin d'explicationDemande d'explication sur des passages de tableaux à 2 dimensions...
Explication d'un bout de code[PHP] session_id retourne l'ID de la session en cours !!! explication
besoin d'1 tite explication sur la récup des données d'un formulaire ![DELPHI] explication sur CreateWindow
[C/C++] Faire marcher pipe et fork conjointement ?les session en php qqs explication svp
Plus de sujets relatifs à : precessus(fork) --->> explication


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