atefensi
Messages postés9Date d'inscriptionlundi 5 juin 2006StatutMembreDernière intervention14 octobre 2006
-
14 oct. 2006 à 17:10
mad_love_disease
Messages postés64Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention 1 juillet 2010
-
18 oct. 2006 à 13:46
Je veux vous poser quelque question sur les processus sous unix
J’ai le programme suivant
Main()
{ int i=0 ;
If(fork()==0)
{
i=1 ;
Exit(i) ;
i=2 ;
}
Printf(“%d”,i);
}
If va afficher que i =0 et se rend pas compte de I du processus fils
Et surtout j’ai pas compris pourquoi il n’affiche pas i=1
Le 2eme pb c’est ce programme
Main()
{
Int i, n=0 ;
For(i=1;i<4;i++)
{
If(fork()!=0)
{
N=i;
}
Printf(“%d”,n);
Pourquoi il parcours l’arbre de façon ascendante en affichant la valeur de n
Pourquoi il n’affiche pas au fur et a mesure la valeur de n en descendant dans l’arbre
Et pourquoi si on remplace if (fork() !=0) par if (fork()==0)
Il parcourt l’arbre de façon descendante et affiche au fur et a mesure n
Le troisième problème consiste a
Utiliser exec(v,vp,l,lp) avec d’autre instructions exemple
Printf ,il n’affiche pas le résultat de printf uniquement celui de execv
Pour d’autre commande comme read write dup… ses commandes seront exécutes que s’ils sont écrites avant exec
Sinon ils seront ignorés pourquoi ??????
pour le pere, la variable i=0 car la variable i est locale, elle n'est pas commune aux deux processus (le pere et le fils). Elles s'apellent toutes les deux i mais sont locales au père et au fils respectivement. Déclare la en globale (attention ce n'est pas terrible) et encore ce n'est pas sur que ca marche car le pere peut executer la commande printf avant que le fils n'est assigné la valeur 1 à la variable i. donc met un sleep(quelquechose) avant l'affichage.