precessus(fork) --->> explication - C - Programmation
Marsh Posté le 09-09-2003 à 19:09:07
il crée un processus appelé père qui en engendre un autre appelé fils
Marsh Posté le 09-09-2003 à 19:16:25
je completerai en disant :
fork()==0
=> code éxécuté par le processus père
fork()!=0
=> code du fils
Marsh Posté le 09-09-2003 à 19:16:29
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 :
|
bof, ceci est mieux (du point de vue du standard):
Code :
|
Code :
|
éviter de déclarer plus d'une variable par ligne
Code :
|
faute de frappe pour le signe inférieur.
sinon un petit printf aurait suffi.
Code :
|
un simple
Code :
|
aurait suffi.
Code :
|
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.
|
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.
Marsh Posté le 09-09-2003 à 17:28:43
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