Création d'un arbre à 13 processus en C sous Linux avec fork

Résolu
ghnadou - Modifié par cptpingu le 13/12/2016 à 11:49
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 12 déc. 2016 à 11:47
Bonjour.

Le but de mon exercice est de créer un père, 3 fils et 9 petits fils et que l'utilisateur demande différentes hauteurs. Pour la hauteur 0, il n'y a que le père. Pour la hauteur 1, il y a 4 processus pères et 3 fils. Pour la hauteur 2, il y aura les 13 processus. On choisira avec la fonction scanf.

Voici mon programme, mais je n'ai fait qu'un père et 3 fils, chaque fils ayant lui-même 2 fils.
Mon problème est que je n'arrive pas à utiliser la fonction scanf dans mon programme.
Merci de m'aider surtout que je suis débutante en programmation C sous Linux.

#include <stdio.h>
#include <unistd.h>

int main(void)
{
  if (fork() != 0)
  {
    if (fork() != 0)
    {
      printf("pere= %d \n", getpid());
      if (fork() == 0)
      {
        printf("fils3=%d pere= %d\n", getpid(), getppid());
        if (fork() != 0)
        {
          if (fork() == 0)
            printf("P6= %d fils3= %d \n", getpid(), getppid());
        }
        else
          printf("P7= %d fils3= %d \n", getpid(), getppid());
      }
    }
    else
    {
      printf("fils2= %d pere= %d\n", getpid(), getppid());
      if (fork() != 0)
      {
        if (fork() == 0)
          printf("P4= %d fils2= %d \n", getpid(), getppid());
      }
      else
        printf("P3= %d fils2= %d \n", getpid(), getppid());
    }
  }
  else
  {
    printf("fils1= %d pere = %d \n", getpid(), getppid()); 
    if (fork() != 0)
    {
      if (fork() == 0)
        printf("P8= %d fils1= %d \n", getpid(), getppid());
    }
    else
      printf("P9= %d fils1= %d \n", getpid(), getppid());
  }
  while (wait(0) != -1);

  return 0;
}

1 réponse

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 12/12/2016 à 11:47
Bonjour.

J'ai édité ton message afin de corriger les fautes d'orthographes, ré-indenter ton code, ajouter la coloration syntaxique (via les balises de code) et rendre ta question plus lisible. Merci d'y penser pour la prochaine fois.

Pour répondre à ta question:
  • Pour scanf, il suffit de lire la doc ou les exemples sur le net: http://xrenault.developpez.com/tutoriels/c/scanf/
  • Le plus simple (pas forcément le plus élégant) est de créer 3 fonctions faisant chacune une des tâches demandées, et d'appeler la bonne fonction via le choix récupéré via scanf.
  • N'oublie pas de gérer le cas où fork renvoie une valeur négative (un fork peut échouer !).


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Rejoignez-nous