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 :

problème avec fork()


Sujet :

C

  1. #1
    Inactif  
    Inscrit en
    Mai 2012
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut problème avec fork()
    bonsoir je croyais avoir compris comment marchait fork() mais là je ne comprends plus rien

    je veux créer un processus père et 2 fils donc je fais ça :

    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
    29
    30
    31
     
    for(i=0;i<2;i++){
     
    		int n=fork();
     
    		if(n>0){
    			//initFichier("test.test");
                            printf("père\n");
    			for (i=0;i<2;i++){
    				int message;
    				pid=wait(&message);
    			} 
    			//emctl(semid,0,IPC_RMID,0);
     
    		}else if(n==0&&i==0){
                            printf("fils1\n");
    			//ecrireFichier("test.test",a,3);
          			exit(0);
     
    		}else if(n==0&&i==1){
     
    			printf("fils2\n");
    			//lireFichier("test.test",a,3);
          			exit(0);  
     
    		}else{
    			exit(1);
    		}
     
     
    	}

    ce code m'affiche père \n et fils1 \n il ne va jamais dans la condition n==0&&i==1 je ne comprends pas pourquoi

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Bonjour,

    Ton code a deux problèmes :
    - un oublie de parenthèses pour le premier if; J'ai rien dit, je n'ai pas l'habitude de ce type d'indentation.
    - l'utilisation de la variable i deux fois dans deux boucles imbriquées... ainsi tu ne fait qu'un seul tour de ta grande boucle (la première) vu qu'à la sortie de ta petite boucle (la deuxième) i vaut 2.

  3. #3
    Inactif  
    Inscrit en
    Mai 2012
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 78
    Points : 0
    Points
    0
    Par défaut
    ah oui merci
    et pour l'identation je suis sur gedit et le tab est grand ^^

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par Alays Voir le message
    ah oui merci
    et pour l'identation je suis sur gedit et le tab est grand ^^
    Bonjour.

    Complètement off-topic, dans les préférences (edit/preferences) de gedit tu peux provoquer l'insertion automatique de caractères espace au lieu d'un caractère tabulation ... c'est très avantageux pour avoir une indentation cohérente entre différent viewer

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Alays Voir le message
    ce code m'affiche père \n et fils1 \n il ne va jamais dans la condition n==0&&i==1 je ne comprends pas pourquoi
    Peut être parce que le fils1 qui meurt immédiatement dans ton code fait que le pere reçoit un signal SIGCHLD (avant d'avoir pu lancer le fils2) et comme il n'y a pas de handler de ce signal dans le père, cela provoque la mort du père (comportement par défaut il me semble lorsqu'un process reçoit un SIGCHLD et qu'il n'y a pas de handler)

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    ^Il me semble que le comportement par défaut pour SIGCHLD, c'est de l'ignorer.
    Citation Envoyé par kwariz Voir le message
    Complètement off-topic, dans les préférences (edit/preferences) de gedit tu peux provoquer l'insertion automatique de caractères espace au lieu d'un caractère tabulation ... c'est très avantageux pour avoir une indentation cohérente entre différent viewer
    Et très désavantageux pour faire le boulot de programmation dans l'éditeur lui-même.

  7. #7
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Et très désavantageux pour faire le boulot de programmation dans l'éditeur lui-même.
    Bonjour,

    pourquoi ?

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    ^Il me semble que le comportement par défaut pour SIGCHLD, c'est de l'ignorer.
    Effectivement, j'avais faux

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    @kwariz: C'est sans doute subjectif, mais pour moi les tabs rendent la navigation dans le texte plus rapide et moins frustrante.
    Aussi, quand on n'utilise des tabs qu'en début de ligne et de manière cohérente, il n'y a pas de problème de décalage: Le seul problème est que ça paraît un peu large sur des éditeurs/afficheurs qui ne permettent pas de réduire la taille des tabs (les navigateurs Internet sont hélas dans ce cas).

  10. #10
    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 : 46
    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
    Ne jamais, jamais, jamais, configurer un éditeur pour afficher des tabulations plus petites. Sinon inévitablement on rend le code illisible dans un éditeur standard. Une tabulation c'est 8 caractères, point. Si on n'aime pas les tabulations de 8 caractères, utiliser des espaces à la place.

  11. #11
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    perso j'ai une grosse préférence pour les espaces, quelque soit l'éditeur il aura toujours la même representation.

    Après cela reste une question de gout, il y'a moyen de mixer.
    http://www.emacswiki.org/emacs-en/SmartTabs

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    pour moi les tabs rendent la navigation dans le texte plus rapide et moins frustrante.
    Bonjour.
    Peux-tu préciser en quoi c'est plus rapide et moins frustrant?

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Parce que je passe d'un indent à l'autre sans me répéter 4 à 8 fois?
    (après oui, il y a les touches Home et End, mais leur comportement tend à changer d'un éditeur à l'autre, et elles sont plus éloignées).

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Parce que je passe d'un indent à l'autre sans me répéter 4 à 8 fois?
    (après oui, il y a les touches Home et End, mais leur comportement tend à changer d'un éditeur à l'autre, et elles sont plus éloignées).
    Ok. Je comprends: tu utilises les flèches pour te déplacer dans la marge (espace entre le début de la ligne et le début du premier mot de la ligne).

    J'essaie de me souvenir, mais je ne vois AUCUNE circonstance où mon curseur serait dans la marge, je n'ai donc jamais à me déplacer dans cette partie-là et n'ai donc pas ce problème d'efficacité!

    En fait, si, ça arrive parfois lorsque je descends d'une ligne vers une ligne plus indentée ou lorsque je suis en début de ligne. Mais, même dans ce cas, je n'ai jamais besoin de me déplacer d'un indent à un autre. Lorsque le curseur est dans la marge, je tape "TAB" (dans emacs) et j'arrive directement au début du premier mot. Si je veux aller plus loin que le début du premier mot, au lieu de taper TAB, je tape plusieurs M-f ou M-right (sur un PC: alt + flèche droite) pour avancer de mot en mot.

    Oh! J'oubliais un détail: je ne formate jamais moi-même mon code (que ce soit du lisp, du C, du shell ou autre), c'est emacs qui le fait à ma place (c'est beaucoup plus efficace et sûr!). Je n'ai donc jamais à insérer ni de tabulations ni d'espaces en début de ligne!
    Je ne m'en soucie qu'au moment de la configuration d'emacs (choix du style d'indentation)... une fois par lustre environ! (et encore...)

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu te reposes donc sur des comportements qui "tendent à changer d'un éditeur à l'autre" pour ne pas avoir à utiliser le caractère \t. Quand on a la garantie d'avoir emacs partout, c'est parfaitement justifié.

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 851
    Points
    5 851
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Tu te reposes donc sur des comportements qui "tendent à changer d'un éditeur à l'autre"
    En quelque sorte, oui.

    pour ne pas avoir à utiliser le caractère \t.
    C'est plutôt pour ne pas m'en préoccuper.

    Pour moi, le code doit TOUJOURS être CORRECTEMENT indenté.
    Je choisis donc de ne pas m'en occuper et de laisser emacs faire le boulot.

    Donc, d'un certain point de vue, effectivement, je ne souhaite pas utiliser le caractère \t, ni l'espace d'ailleurs! (en tout cas, pas pour l'indentation)

    Quand on a la garantie d'avoir emacs partout, c'est parfaitement justifié.
    Je n'ai pas cette garantie, mais, dans la pratique, depuis 1993, à part une mission de quelques mois avec vi et une mission Android d'un mois avec Eclipse, j'ai toujours réussi à avoir emacs (ou xemacs ou aquamacs)
    Quand on a ses petites habitudes, ça améliore la productivité!

Discussions similaires

  1. problème avec fork()
    Par Boss38400 dans le forum Débuter
    Réponses: 4
    Dernier message: 20/04/2010, 22h04
  2. Problème avec les forks
    Par dot-_-net dans le forum C
    Réponses: 10
    Dernier message: 09/05/2008, 23h29
  3. probléme avec fork()
    Par yous18 dans le forum C
    Réponses: 38
    Dernier message: 08/03/2008, 11h21
  4. problème avec fork et execvp !
    Par julien.cousineau dans le forum Linux
    Réponses: 0
    Dernier message: 07/10/2007, 23h38
  5. [Perl]problème avec fork
    Par LE NEINDRE dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 23/09/2005, 15h31

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