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 :

Fork et Fils


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Fork et Fils
    Bonjour

    Je voudrais créer 4 processus de 3 façons différentes :



    Voici mon main() :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    int main()
    {
    	pid_t pid;
     
    cerr<<"------avant le fork------"<<endl;
     
    	pid = fork();
     
    cerr<<"------apres le fork------"<<endl;
     
    /* Si pid > 0 on est dans le processus pere
            pid = 0 processus fils
            pid < 0 le fork n'a pas fonctionne */
    	if (pid > 0) {
     
     
           for (int i=0;i <11 ; i++)
    	    cout << i << endl;
            cout<<"\tProcessus pere (valeur pid="<<pid<<"), getpid="<<getpid()<<" , getppid="<<getppid()<<endl;
    		sleep(5);
    			}
    	else if (pid == 0){
    	    for (int i=20;i <31 ; i++)
    	    cout << i << endl;
    		cout<<"\tProcessus fils valeur pid="<<pid<<"), getpid="<<getpid()<<" , getppid="<<getppid()<<endl;
    		sleep(5);
    		}
    	else
    		cerr<<"Erreur a la creation du processus"<<endl;
     
    cerr<<"------avant le return du main()------"<<endl;
     
    return(0);
    }
    Donc le père affiche des entiers de 1 à 10 , et le premier fils de 10 à 20 .
    Comment puis-je faire pour que le fils 1 affiche 10 à 20 , le fils2 de 20 à 30 , le fils3 de 30 à 40 ?

    Pour l'une des façons ,c 'est à dire père -> fils1 -> fils2 -> fils3 , j'ai pensé rajouter au fils1 un fork , donc au fils de fils1 , c'est à dire fils2 , un nouveau fork ?

    Enfin j'arrive pas à organiser tout ça

    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 118
    Points : 158
    Points
    158
    Par défaut
    Hé bien d'après tes explications et les commentaires dans ton code, il semblerait que tu aies compris le fonctionnement de fork. Dans tous les cas il te faudra faire appel à fork autant de fois que tu voudras de fils. Donc tentes des choses et réfléchis aux différents chemins empruntés par les processus une fois que le fork a fini de s'exécuter.

  3. #3
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Peut-être qu'avec une fonction qui prend un int en paramètre (le premier chiffre à afficher), qui crée un fils et affiche ces nombres, tu t'en sortiras mieux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void print_with_fork(int n);
    Ne jamais hésiter à décomposer son code

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    moi je vois ça comme cela :

    dans une boucle for tu créer 3 processus ( avec un test sur le pid pour que seul le pere créer les processus) avant chaque appel a fork tu modifie un entier qui sera le num de ton fils ( comme la mémoire est copiée a chaque appel de fork chaque fils aura un numero different )
    ensuite après la boucle for tu réalise un switch en fonction de la variable
    attention le pere aura la meme valeur que le dernier fils il faudra donc dans ce cas la ajouter un if sur le pid supplementaire dans le switch


    pseudo 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
     
     
    int pid,index=0;
    for(int i=0;i<3;i++)
    {
        index++;
        pid=fork();
        if(pid==0)
        {
     
          break; // sort du for pour les fils;
     
         }
    }
     
    switch index
     
    case 1
    // compter de 10 a 20
    case 2
    // compter de 20 a 30
    case 3
          if pid==0 //compter de 30 a 40
          else // compter de 1 a 10

    mes souvenirs de cours sont un peu loin mais il me semble que ce code fonctionnerait

Discussions similaires

  1. Aide fork() petit-fils gérés par le père ?
    Par Drexler82 dans le forum Programmation et administration système
    Réponses: 15
    Dernier message: 07/06/2011, 15h04
  2. fork creation de plusieurs fils
    Par jmjmjm dans le forum Linux
    Réponses: 8
    Dernier message: 19/01/2007, 15h17
  3. Réponses: 4
    Dernier message: 06/01/2007, 21h42
  4. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  5. [POO] Fork : Pere et Fils et objets ???
    Par haffouff dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 14h58

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