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 :

Petit coup de main pour la compréhension de fork()


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Petit coup de main pour la compréhension de fork()
    Bonjour à tous j'essaye de comprendre le programme ci-dessous cependant je ne suis pas sur de ce que j'en ai compris si quelqu'un pouvait me confirmer tout cela ce serait top !
    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
     
    int main (int argc, char* argv[]) { 
      int status, i, cpt = 0; 
      for (i=1 ; i<argc; i++) { 
      if ( fork() == 0 ) {         //Création d'un processus fil//
      execlp (argv[i] , argv[i] , NULL);   //Appel à la fonction execlp et remplacement du code d'exécution du fils par ce qui est donné en ligne de commande
      exit(10);                    //Cette instruction de fin du processus fils ne s'exécutera jamais
      } 
      wait(&status);         // Le père attend le fils
      if( (WEXITSATUS(status) == 10) {  //On ne rentrera jamais dans cette boucle car le exit(10) n'aura jamais lieu
      printf("%s\n’", argv[i]) ;          //Affiche l'agument passé en ligne de commande
      cpt++;  
      } 
      } 
      printf(‘’cpt = %d\n’’, cpt); // Affiche le nbre de tours effectués
      return 0; 
     }
    Merci d'avance pour vos réponses en vous souhaitant de bonne fins de vacances !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonsoir et bienvenue,

    Tu as pratiquement tout bon malgré tout. fork() crée effectivement un processus fils, si bien qu'à l'issue de l'opération, cette fonction va retourner une valeur des deux côtés (père et fils). Le père reçoit le PID du fils nouvellement créé, le fils reçoit 0 (il lui appartient alors d'appeler getpid() pour savoir de qui il est la progéniture) ou bien la fonction renvoie une valeur négative en cas d'échec. Donc, dans tous les cas, si on reçoit une valeur non nulle, on sait qu'on est toujours dans le processus initial.

    Le exit(10) ne sera effectivement jamais appelé en temps normal. Il se trouve que exec() peut échouer pour les mêmes raisons que les autres et dans ce cas, le processus fils continue à se comporter comme un processus ordinaire et, donc, à poursuivre l'exécution de son programme. Il va donc se terminer avec un exit(10) et le processus père sera bien en mesure de recevoir ce code de retour.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Ok merci beaucoup !

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

Discussions similaires

  1. Petit coup de main pour une meilleur compréhension
    Par b_sky dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 22/06/2011, 19h51
  2. Petit coup de main pour un petit script
    Par Baradhur dans le forum Linux
    Réponses: 4
    Dernier message: 11/11/2010, 01h38
  3. Petit coup de main pour débuter
    Par Wil14 dans le forum JPA
    Réponses: 2
    Dernier message: 14/04/2010, 12h32
  4. Petit coup de main pour syntaxe
    Par santacrus dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/12/2008, 21h11

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