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 :

Vérification code de retour


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut Vérification code de retour
    Bonjour,

    je rencontre un problème lors de la vérification du code de retour d'une exécution.

    J'ai dans une fonction le code suivant :

    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
     
    if ((pid = fork( )) == 0)
    {	
               ..
    	   execv("/bin/sh",argv);
               exit(127);
    }	  
    else 
    {	
              while (waitpid(pid, &retour, 0) < 0) //j'attends la fin du fils
              if (retour == 127)
    	     	{
    	     		printf("Erreur lors de l'execution du programme\n");
    	     		return (-1);
    	     	}
    	     	else
    	     	{
    	 		return (retour); 
    	 	}
    }
    Ensuite lorsque je désire vérifier ce code de retour, j'utilise :

    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
     
    code_retour_exec = appel_a_ma_fonction();
     
    if(WIFEXITED(code_retour_exec))//le programme s'est termine normalement
    	{
    		code = 0;
    	}
    else if(WIFSIGNALED(code_retour_exec)) //le programme s'est termine a cause d'un signal
    	{
    		code = 1;
    	}
    else if(WIFSTOPPED(code_retour_exec))//le programme s'est arrete a cause d'un signal
    	{
    		code = 2;
    	}
    Le problème que je rencontre c'est qu'il tombe toujours dans le dernier cas (code =2).
    Pourtant, dans mon exec de ma fonction, j'ai essayé d'exécuter un simple programme "Hello World!" en mettant à la fin exit(0)...et même ça ça arrive dans le dernier cas.

    Je n'arrive pas à comprendre....
    Merci pour l'aide

    EDIT : c.f. poste ci-dessous

  2. #2
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour,

    Je lis dans le man qu'en cas de succès, le PID du fils est renvoyé au processus parent, et 0 est renvoyé au processus fils. En cas d'échec -1 est renvoyé dans le contexte du parent, aucun processus fils n'est créé, et errno contient le code d'erreur.

    Si tu testes le retour de fork avec 0, le code de la condition sera obligatoirement executé par le processus fils non? en quoi est-ce une erreur? (cf ton commentaire).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Oui merci de me l'avoir fait remarquer. J'avais un test < 0 pour tester une erreur de fork mais je l'ai enlevé pour alléger le code. J'ai oublié de retirer le commentaire. Merci de ta remarque

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Bonjour,

    sous quel condition WIFEXITED est-il vrai? seulement pour un code de retour égale à zéro?

    Et si mon exec, dans le fils, exécute un programme java et que celui-ci effectue un System.exit(0), il est considéré au même titre qu'un exit(0) je suppose?

    Merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    J'ai une question pour faire avancer les choses :

    quand j'appele execv("/bin/sh",argv);, le code de retour est celui du shell ou alors du programme exécuté par le shell?

Discussions similaires

  1. [Runtime] code de retour = 1
    Par d_token dans le forum API standards et tierces
    Réponses: 19
    Dernier message: 29/08/2006, 14h57
  2. [Mail] codes de retour email
    Par drommk dans le forum Langage
    Réponses: 8
    Dernier message: 26/06/2006, 14h53
  3. sqlldr code de retour 137
    Par thunderblade dans le forum Oracle
    Réponses: 9
    Dernier message: 18/04/2006, 13h55
  4. DELPHI6, Programme console et code de retour
    Par Desraux dans le forum Débuter
    Réponses: 2
    Dernier message: 21/07/2005, 08h15
  5. [Debutant(e)] Code de retour de mon programme
    Par benji999 dans le forum Général Java
    Réponses: 2
    Dernier message: 10/12/2004, 13h15

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