IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

problème avec fork()


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 63
    Points
    63
    Par défaut problème avec fork()
    Bonsoir a tous ;-)
    j'ai un problème avec une fonction fork();
    je dois écrire un programme qui réalise les taches suivantes:

    1/ il demande a l'utilisateur d'entrer un entier entre 0-1000 qu'il Stoke dans une variable "n"
    2/ il doit crée 11 processus .
    3/ chaque processus doit vérifier si la division par un entier qui se trouve dans le tableau t[i]==0
    si mon programme n'affiche rien c'est que l'entier "n" n'est pas un multiple des entier qui sont dans le tableau
    exemple :
    Entrez un entier inférieur à 1000 : 935
    Je suis le processus qui vérifie la division par 5 : 935 est multiple de 5 !
    Je suis le processus qui vérifie la division par 11 : 935 est multiple de 11 !
    Je suis le processus qui vérifie la division par 17 : 935 est multiple de 17 !


    mon problème : c'est le même processus qui réalise la tache


    voila une partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
     
    //déclaration des entier : proc , n , i ,  t[12]={1,2,3,5,7,11,13,17,19,23,29,31}; 
    //lire l'entier et le stocker dans une variable n 
    // vérification de l'action de l'utilisateur 
    //boucle  11 fois {  
    // création de processus a partir du processus pére 
    // c'est la le problème 
     
    					if (proc!=0)
    						{
    					proc=fork();
    						}
    			               wait(NULL);
    // traitement effectuer par les processus 
            if ((proc==0) && (n%t[i])==0){ 
     
     printf("proc%d mon pid %d : mon papa est %d!\n",proc,pid_proc,pid_procpp); 
     printf("Je suis le processus qui vérifie la division par %d : %d est le multiple de %d!\n",t[i],n,t[i]); 
     
                   			 }
    //}
    //fin

    Merci

  2. #2
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Salut
    ton utilisation de fork() n'est pas très conventionnelle.
    Ceci est la bonne façon de procéder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int pid=fork();
    if (pid == 0) /* instructions de l'enfant */
    else if(pid > 0) /* instructions du parent */
    else /* erreur de creation du processus */
    Je te conseille aussi d'écrire une fonction pour l'affichage

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 63
    Points
    63
    Par défaut
    Merci
    juste une dernier question :
    donc si j'ai bien compris et si j'adapte ton raisonnement a mes besoins cette partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int proc;
    for (i=0;i<11;i++){  
    proc=fork();
     if (proc==0){ 
    //traitement par les fils
    exit(0);
    }
    }
    va crée 11 fils qui vont entrer dans mon if qu'une seul fois ??
    c'est dont j'ai besoin en faite

  4. #4
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    ben ouais ...
    Seulement il va te rester le problème d'associer le bon traitement avec
    le bon fils puisque chaque fils doit traiter (et afficher) des données
    différentes.
    Je pense que tu dois découper le problème en créant une procédure
    séparée à laquelle tu passeras une donnée différente selon le fils .

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 63
    Points
    63
    Par défaut
    Merci pour ton aide
    pour réaliser le traitement que je veux j'ai ajouté un exit(0);
    pour arrêter le processus fils et être sur que c'est le fils suivant qui réalise le traitement voulu .
    j'ai rajouter ensuite une ligne pour vérifier qui fait quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf(" mon pid %d : mon papa est  %d!\n",getpid(),getppid());
    j'ai obtenu les pid des processus fils .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec fork()
    Par Alays dans le forum C
    Réponses: 15
    Dernier message: 05/10/2012, 10h29
  2. Problème avec les forks
    Par dot-_-net dans le forum C
    Réponses: 10
    Dernier message: 09/05/2008, 23h29
  3. probléme avec fork()
    Par yous18 dans le forum C
    Réponses: 38
    Dernier message: 08/03/2008, 11h21
  4. problème avec fork et execvp !
    Par julien.cousineau dans le forum Linux
    Réponses: 0
    Dernier message: 07/10/2007, 23h38
  5. [Perl]problème avec fork
    Par LE NEINDRE dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 23/09/2005, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo