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

  FORUM HardWare.fr
  Programmation
  C

  Fork et programme aléatoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fork et programme aléatoire

n°1623318
Anonymouse
Posté le 13-10-2007 à 15:50:44  profilanswer
 

Bonjour
 
Je réalise un programme en c qui, pour le moment, doit faire communiquer deux processus par un pipe.
Or selon l'ordre dans lequel l'ordonnanceur fait passer les processus mon programme marche ou ne marche pas.
Je ne vois vraiment pas quelle est la partie du code posant problème.
 
Voila le code:

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>
  5. int main(int argc, char **argv)
  6. {
  7. pid_t pid;
  8. printf("\n 1) je suis dans main et mon pid est %i \n",getpid());
  9. /*---------Création du 1er processus fils--------------*/
  10. pid = fork();  //pid = pid du fils
  11. /*---------si le fork ne cree pas un nouveau processus---------*/
  12. if (pid < 0)
  13. {
  14.  perror("fork" );
  15.  return 1;
  16. }
  17. /*-----------si on est dans p1-----------*/
  18. else if (pid)
  19.  {
  20.   printf("\n 2) Je suis dans p1\n" );
  21.   printf("\n Le PID du processus P1 est: %i \n", getpid());
  22.   printf("\n Le PID du processus main est: %i \n", getppid());
  23.   /*---------creation d'un 2eme processus-------------*/
  24.   pid=fork();   // creation de p2
  25.   /*-----------si erreur------------*/
  26.   if(pid<0)
  27.   {
  28.    perror("fork" );
  29.    return 1;
  30.   }
  31.   /*-----------si pid est egal a 0 on est dans p2------------*/
  32.   else if(pid)
  33.    {
  34.     printf("\n 3) Je suis dans P2\n" );
  35.     printf("\n Le PID du processus P1 est: %i \n", getppid());
  36.     printf("\n Le PID du processus P2 est: %i \n", getpid());
  37.    }
  38.   /*----------sinon on est dans p1-----------*/
  39.   else
  40.    {
  41.     printf("\n 4) Je suis dans P1" );
  42.     printf("\n Le PID du processus P1 est: %i \n", getpid());
  43.    }
  44.  }
  45. else
  46.  {
  47.   printf("\n 5) Je suis dans main" );
  48.   printf("\n Mon PID est de: %i \n", getpid());
  49.   printf("\n Le PID du processus P1 est: %i \n", pid);
  50.  }
  51. }


 
Et voila le code de ma console quand ca ne va pas
 
            1) je suis dans main et mon pid est 5779  
 
            5) Je suis dans main
            Mon PID est de: 5780  
 
            Le PID du processus P1 est: 0  
 
            2) Je suis dans p1
 
            Le PID du processus P1 est: 5779  
 
            Le PID du processus main est: 5351  
 
            4) Je suis dans P1
            Le PID du processus P1 est: 5781  
            Le titre de ma fenetre est: Processus P1  
 
            3) Je suis dans P2
 
            Le PID du processus P1 est: 5351  
 
            Le PID du processus P2 est: 5779  
 
            descripteur de p1 vers p2 3  
 
            descripteur de p2 vers p1 3
 
Je ne comprend absolument pas comment le pid de main peut il varier  entre le début et la fin de mon code. :pt1cable:  
 
Et pourquoi quand je fais printf("\n Le PID du processus P1 est: %i \n", pid); il me retourne le code 0 alors que p1 étant conçu il devrait me retourner le pid de p1.
 
 
Merci d'avance de votre aide.
Je me tiens à votre disposition
 
edit:simplification du code


Message édité par Anonymouse le 13-10-2007 à 17:08:13
mood
Publicité
Posté le 13-10-2007 à 15:50:44  profilanswer
 

n°1623370
breizhbugs
Posté le 13-10-2007 à 20:19:56  profilanswer
 

'Soir,
Suis pas un expert mais d'apres le man:

Citation :


RETURN VALUES
     Upon successful completion, fork() and fork1() return  0  to
     the  child  process  and  return the process ID of the child
     process to  the  parent  process.  Otherwise,  (pid_t)-1  is
     returned to the parent process, no child process is created,
     and errno is set to indicate the error.


Je crois que tu as mal compris la valeur de retour du fork!
Quand tu ecris "if (pid) ..." la suite est dans le main car "fork renvoie le pid dans le pere" (donc pid!= 0).


Message édité par breizhbugs le 13-10-2007 à 20:21:40
n°1623373
Anonymouse
Posté le 13-10-2007 à 20:56:50  profilanswer
 

Ouais c'était ca merci de ton aide :D


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

  Fork et programme aléatoire

 

Sujets relatifs
Programme compliqué : robotphp exécution d'un programme en graphique
Programme de sourisTirage d'une variable aléatoire comprise ...
Cacher un programme à son éxécutionAlgorithme parallélisé: Je n'arrive pas à l'écrire avec fork()
[Résolu] Problème programme simple[resolu] Pb programme simple en Ruby
proteger donnee programme htmlEnvoie d'email illimité grace à un programme PHP??
Plus de sujets relatifs à : Fork et programme aléatoire


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