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 :

retour de fork()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut retour de fork()
    Bonsoir,

    Question qui vous paraîtra stupide, mais qui me bloque complètement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pid_t pid;
    pid=fork();
     
    if(!pid) 
    {
    printf("A");
    }
    wait(Null);
    printf("B");
    exit(0);
    Je sais que fork renvoi -1 si la création du fils échoue et 0 si le fils est bien créé.

    Mais ici, lorsque l'on écrit !pid je ne comprends pas ce qu'il faut comprendre...si pid != 0 ou si pid != 1 ou bien autre chose...

    wait attend la terminaison d'un processus pour passer à la suite de sorte que


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pid_t pid=fork();
    if(pid==0) // si fils
    {
    printf("A");
    }
    else // si père
    {
    printf("B);
    }
    va afficher B A



    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    pid_t pid=fork();
    if(pid==0) // si fils
    {
    printf("A");
    }
    else // si père
    {
    wait(Null);
    printf("B);
    }
    va afficher A B

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 452
    Par défaut
    Bonjour,

    En C, un point d'exclamation « ! » seul correspond à l'opérateur logique « NON » (NOT en anglais). Cet opérateur renvoie un booléen qui reflète l'inverse de la valeur de l'expression qui le suit. C'est-à-dire que si « expression » est vraie, alors « !expression » est fausse, et vice versa. Ça veut dire également que l'expression en question va d'abord être elle-même traduite en booléen avant d'être complémentée. Étant donné qu'un tel booléen vaut « 0 » pour « faux » et « 1 » pour « vrai », on considère que toute valeur non nulle est vraie.

    Par conséquent, « if(!pid) » s'interprète comme « si pid est nul ».

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Merci pour ta réponse, je savais qu'il s'agissait du non. Mais j'avais tout de même un doute.

    EN tout cas ici il faut donc que je comprenne if (pid==0).


    Parce qu'il y a l'histoire du Faux implique vrai

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int a=0;
     
    if(!a)
    {
        //affichage
    }
    On entre dans la boucle et ce peu importe la valeur de a.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 452
    Par défaut
    Citation Envoyé par Amnael Voir le message
    EN tout cas ici il faut donc que je comprenne if (pid==0).
    En effet.

    Parce qu'il y a l'histoire du Faux implique vrai
    « L'implication » est encore une autre notion (définie en logique également). L'implication s'écrit « A → B » et signifie si A est vrai alors B l'est aussi, ce qui a été assimilé (après de longues réflexions), à « NON A OU B ».

    Par exemple […] On entre dans la boucle et ce peu importe la valeur de a.
    Non. On n'y entre que si la variable « a » est nulle. Si tu y entres dans d'autres conditions, c'est qu'il y a une erreur quelque part. La plus courante d'entre elles consiste à ajouter un point-virgule « ; » superflu après le « if » et avant le bloc « {…} ».

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    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 815
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par Amnael Voir le message
    Parce qu'il y a l'histoire du Faux implique vrai
    Je sens que tu cherches à dire quelque chose... mais il y a des interférences peut-être...

    Citation Envoyé par Amnael Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!a)
    {
        //affichage
    }
    On entre dans la boucle et ce peu importe la valeur de a.
    Quelle boucle ? La boucle "if" ???
    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]

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonjour,

    En C, un point d'exclamation « ! » seul correspond à l'opérateur logique « NON » (NOT en anglais). Cet opérateur renvoie un booléen qui reflète l'inverse de la valeur de l'expression qui le suit. C'est-à-dire que si « expression » est vraie, alors « !expression » est fausse, et vice versa. Ça veut dire également que l'expression en question va d'abord être elle-même traduite en booléen avant d'être complémentée. Étant donné qu'un tel booléen vaut « 0 » pour « faux » et « 1 » pour « vrai », on considère que toute valeur non nulle est vraie.

    Par conséquent, « if(!pid) » s'interprète comme « si pid est nul ».
    Je complète :
    • Si tu as une variable qui ne vaut pas 0, !variable vaut 0, quelle que soit la valeur de variable.
    • Si tu as une variable qui vaut 0, !variable vaut 1, quelle que soit la valeur de la variable


    [edit : correction de la valeur du !0 après vérification dans la norme C99, paragraphe 6.5.3.3]
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. [XP] Retour d'experience
    Par virgile04 dans le forum Méthodes Agiles
    Réponses: 10
    Dernier message: 22/10/2002, 08h25
  3. Retour chariot dans un TMemo ?
    Par Vincent PETIT dans le forum C++Builder
    Réponses: 7
    Dernier message: 27/08/2002, 18h55
  4. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  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