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 :

[c] Comprehension de fork


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut [c] Comprehension de fork
    Salut a tous .

    je n'arrive pas a trouver que fait ce programme
    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
     
    int i=4, j=10;
    int main (){
     
                     pid_t pid;
                     pid=fork();
     
                     if (pid<0) exit(1);
                     j+=2;
     
                     if (pid==0) {
     
                           i*=3; 
                           j*=3; 
                    }
     
                    else {
                          i*=2;
                          j*=2; 
                          }
     
                    printf("i= %d, j= %d" , i , j);
                    return(0);
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par REANS Voir le message
    Salut a tous .

    je n'arrive pas a trouver que fait ce programme
    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
     
    int i=4, j=10;
    int main (){
     
                     pid_t pid;
                     pid=fork();
     
                     if (pid<0) exit(1);
                     j+=2;
     
                     if (pid==0) {
     
                           i*=3; 
                           j*=3; 
                    }
     
                    else {
                          i*=2;
                          j*=2; 
                          }
     
                    printf("i= %d, j= %d" , i , j);
                    return(0);
    }
    Ta question signifie que tu connais pas le fork() qui permet de créer un second processus en parallèle avec le programme en cours.
    Donc le programme lance un processus fils avec fork() et vérifie que le fils a bien été créé (le test si pid < 0).
    Une fois le fils créé, il y a 2 processus qui tournent. Dans le premier (le père), la variable pid qui a récupéré le résultat du fork contient le n° de pid du fils. Et dans le second (le fils), la variable pid vaut 0.
    Donc chaque processus teste qui il est (fils si pid = 0 et père sinon) et la partie fils va multiplier i et j par 3 pendant que le père multiplie i et j par 2.
    Et la ligne printf() étant hors du if sera exécutée par les deux processus père et fils. Donc t'auras 2 affichages, chacun affichant ses i et j locaux (car les variables i et j ont été dupliquées et chaque processus travaille sur sa propre copie).

    Rajoute sous ce printf la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("pid=%d, ppid=%d et variable pid=%d\n", getpid(), getppid(), pid)
    et tu comprendras mieux...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut
    svp , a quoi sert le return(0) al fin du programme?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    return 0 indique le code que renvoie le programme à l'exterieur du programme ( soit au système, soit au terminal dans lequel il est lancé ... ). Permet ainsi de verifier que le programme n'a pas fait d'erreur ou autre chose dans ce genre.
    0 parce qu'il n'y a pas d'erreur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Invité de passage
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Par défaut
    bonjour

    je voudrais savoir s'il vous plait a koi cela sert la fonction exit(1)
    enfin pourquoi des fois on met exit(1) é des fois exit(0)?
    merci d'avance

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bonita Voir le message
    bonjour

    je voudrais savoir s'il vous plait a koi cela sert la fonction exit(1)
    enfin pourquoi des fois on met exit(1) é des fois exit(0)?
    merci d'avance
    Ca ne se fait pas de squatter une discussion ouverte par qqun d'autre. En général on ouvre la sienne

    Ca permet de renvoyer une valeur (0 ou 1 ou autre jusqu'à 255) au processus qui a appelé le programme pour lui indiquer si tout s'est bien déroulé (exit(0)) ou s'il y a eu un problème (exit(autre_chose_que_0)).
    Ainsi, le processus peut détecter si le programme qu'il a appelé s'est bien déroulé ou pas.

    Si ce processus qui appelle le programme est un shell, cette valeur est récupérée dans la variable $?.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [ADODB]probleme de comprehension
    Par flogreg dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 16h15
  2. "Fork" en assembleur
    Par kamikazz dans le forum Assembleur
    Réponses: 6
    Dernier message: 05/10/2004, 13h36
  3. [langage] [Fork] Détecter un fichier
    Par GLDavid dans le forum Langage
    Réponses: 11
    Dernier message: 08/07/2004, 01h05
  4. Réponses: 3
    Dernier message: 04/09/2002, 09h42
  5. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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