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 :

Appel processus dans une fonction


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Appel processus dans une fonction
    Bonjour, j'ai un problème au sujet d'une fonction qui appelle un processus...
    La fonction main() appelle la fonction rec() qui crée 2 processus fils, chacun retournant 1. Le
    processus père se charge d'additionner les deux valeur de retour de ses fils et de renvoyer cette valeure. Seulement, dans ce cas le programme affiche 0. Dans le cas ou il n'y a pas de fonction rec(), c-a-d que tous le code se fait dans la fonction main(), le programme affiche bien 2. Pouquoi?

    Code rec.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
    39
    40
    41
    42
    43
    44
    45
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <time.h>
     
    int rec(void);
     
     
    int main(void)
    {
     
      rec();
      return 0;
    }
     
    int rec(void)
    {
      int n;
      n = 1;
      pid_t pid[2];
     
      pid[0]=fork();
      if(pid[0]==0){
        if(n==1){
          return 1;
        }
      }
      pid[1]=fork();
      if(pid[1]==0){
        if(n==1){
          return 1;
        }
      }
      int a,b;
      waitpid(pid[0],&a,0);
     
      waitpid(pid[1],&b,0);
     
      printf("%d\n",WEXITSTATUS(a)+WEXITSTATUS(b));
      return WEXITSTATUS(a)+WEXITSTATUS(b);
     
     
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour

    La valeur de retour d'un programme est la valeur de retour de la fonction main.

    Dans l'exemple posté, on retourne toujours 0.

    Voici une solution au problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main(void)
    {
      return rec();
    }
    On peut aussi utiliser la fonction exit dans rec, mais c'est moins élégant je pense.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    D'autre part, même si ce n'est pas lié à ton problème, WEXITSTATUS(x) n'est significatif que si WIFEXITED(x) est vrai.

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

Discussions similaires

  1. Appeler datepicker dans une fonction externe
    Par Augustule dans le forum jQuery
    Réponses: 3
    Dernier message: 26/09/2013, 12h20
  2. Appeler une fonction dans une fonction
    Par bryanstaubin dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/06/2007, 09h39
  3. Réponses: 3
    Dernier message: 29/05/2007, 17h18
  4. Réponses: 6
    Dernier message: 18/04/2007, 11h47
  5. [langage] appel d'un tableau dans une fonction
    Par donny dans le forum Langage
    Réponses: 11
    Dernier message: 13/11/2006, 16h17

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