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

Linux Discussion :

programme en c


Sujet :

Linux

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut programme en c
    bonjour,
    j'ai fait un programme pour la création de 5 processus(n=5) ,mais dans l'éxecution il crée 1 seul processus( fils pére) Où es l'erreur dans mon code
    merci d'avance
    Code C : 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
    35
    36
    37
    38
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/wait.h>
    int
    main ()
    {
    int i, n;
    printf("entrer le nombre de voitures:  ");
    scanf("%d",&n);
    i=0;
    while(i<n)
    {
     
    pid_t pid_fils;
    do {
    pid_fils = fork ( ) ;
    }
    while ((pid_fils == -1) && (errno == EAGAIN));
    if (pid_fils == -1)
    {
    printf ( "fork( ) impossible, errno=%d\n", errno);
    return (1);
    i++;
    }
    if (pid_fils == 0)
    {
    printf ("Fils : PID=%d, PPID=%d\n",getpid( ) , getppid( ));
    return (0);
    }
     else {
    printf ("Père : PID=%d, PPID=%d\n",getpid( ) , getppid( ));
    wait (NULL);
    return(0);
    }
    }
    }

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Si après le fork tu fais un return dans le code fils et le code père... Ben il n'y a plus personne pour continuer...

    Jc

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Si après le fork tu fais un return dans le code fils et le code père... Ben il n'y a plus personne pour continuer...

    Jc
    j'ai modifier le code, (j'ai suprimé return ) l'execution boucle infini!!!!

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    Code C : 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
    35
    36
    37
    38
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/wait.h>
    int
    main ()
    {
    int i, n;
    printf("entrer le nombre de voitures:  ");
    scanf("%d",&n);
    i=0;
    while(i<n)
    {
     
    pid_t pid_fils;
    do {
    pid_fils = fork ( ) ;
    }
    while ((pid_fils == -1) && (errno == EAGAIN));
    if (pid_fils == -1)
    {
    printf ( "fork( ) impossible, errno=%d\n", errno);
     
    i++;
    }
    if (pid_fils == 0)
    {
    printf ("Fils : PID=%d, PPID=%d\n",getpid( ) , getppid( ));
     
    }
     else {
    printf ("Père : PID=%d, PPID=%d\n",getpid( ) , getppid( ));
    wait (NULL);
     
    }
    }
    }
    l'exécution boucle infini pour qoui???????

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il faut faire attention à ce qu'on fait. Le return pour le père était inutile mais pas pour le fils...

    Réfléchis à ce que tu souhaites faire...

    Jc

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Il faut faire attention à ce qu'on fait. Le return pour le père était inutile mais pas pour le fils...

    Réfléchis à ce que tu souhaites faire...

    Jc
    pfffffffffff g pas trouvé la solution

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par hanou88 Voir le message
    pfffffffffff g pas trouvé la solution
    Déjà:

    1) Il faudrait avoir un i++ dans la boucle qui n'est pas derrière un return. Peut-être à la fin de la boucle ?

    2) Ensuite, ton fils retourne tout de suite, ca c'est bien parce que tu ne veux pas qu'ils te créent des petits-fils

    3) Ton père ne doit pas retourner puisque sinon il ne peut plus créer de fils.

    Jc

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Déjà:

    1) Il faudrait avoir un i++ dans la boucle qui n'est pas derrière un return. Peut-être à la fin de la boucle ?

    2) Ensuite, ton fils retourne tout de suite, ca c'est bien parce que tu ne veux pas qu'ils te créent des petits-fils

    3) Ton père ne doit pas retourner puisque sinon il ne peut plus créer de fils.

    Jc
    toujour la boucle infinie!!!!!!!

  9. #9
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par hanou88 Voir le message
    toujour la boucle infinie!!!!!!!
    Montre ton code. Sinon je ne peux pas aider plus...
    Jc

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 357
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Montre ton code. Sinon je ne peux pas aider plus...
    Jc
    c'set bon, le code sa marche merci bcp pour votre aide.

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

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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