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

POSIX C Discussion :

C processus père et fils


Sujet :

POSIX C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut C processus père et fils
    Bonjour,

    voici un code que je viens d'écrire:

    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
        int tempo,x,a,status;
        srand(time(NULL));
        printf("Veuillez introduire un nombre entier entre 1 et 10:\n");
        int n = 0;
        while(n <1 || n >9)
        {
          scanf ("%d", &n);
        }
        printf("Nombre introduit: %d\n",n);
        for (x=0 ; x<n; x++)
        {
            tempo = (rand()%3)+1;
            printf("P: Creation du fils %d\n",x+1);
            a = fork();
            if (a<0) return 1;
            if (a == 0)
            {
                printf("\t\tJe suis le fils %d de pid %d\n",x+1,getpid());
                sleep(tempo);
                exit(x);
            }
        }
        for(x=0;x<n;x++)
        {
            wait(&status);
              if(WIFEXITED(status)) printf("P: Le fils num %d de pid se termine\n",WEXITSTATUS(status)+1);
        }
        return 0;


    je voudrais afficher le pid de chaque fils qui se termine dans la dernière boucle, quelqu'un pourrait-il m'aider?

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    wait() retourne le pid à toi de l'afficher...
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for(x=0;x<n;x++)
        {
     printf("P: Le fils num %d de pid %d se termine\n",WEXITSTATUS(status)+1,wait(&status));
        }
    çela me donne des réponses cohérentes, merci!

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sauf que c'est, à ma connaissance, un comportement indéfini: Je ne crois pas que l'ordre d'évaluation des paramètres d'une fonction soit fixé...

    N'est-il pas plus simple d'utiliser une variable?
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	for(x=0 ; x<n ; x++)
    	{
    		int pidfils = wait(&status);
    		printf("P: Le fils num %d de pid %d se termine\n", WEXITSTATUS(status)+1, pidfils);
    	}
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Sauf que c'est, à ma connaissance, un comportement indéfini: Je ne crois pas que l'ordre d'évaluation des paramètres d'une fonction soit fixé...

    N'est-il pas plus simple d'utiliser une variable?
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	for(x=0 ; x<n ; x++)
    	{
    		int pidfils = wait(&status);
    		printf("P: Le fils num %d de pid %d se termine\n", WEXITSTATUS(status)+1, pidfils);
    	}
    attention toutefois, wait() retourne un pid_t et non un int, qui peut être aussi grand qu'un long:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(x = 0; x < n; x++)
    {
       pid_t pidfils = wait(&status);
       printf("P: Le fils num %d de pid %ld se termine\n",
              WEXITSTATUS(status)+1, (long int)pidfils);
    }
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/10/2012, 21h34
  2. Réponses: 1
    Dernier message: 22/12/2011, 14h16
  3. Réponses: 2
    Dernier message: 17/12/2008, 13h14
  4. Réponses: 8
    Dernier message: 09/11/2006, 14h01

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