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 :

[Shell] Code de retour


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Septembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 39
    Par défaut [Shell] Code de retour
    Bonjour à tous,

    pour m'entraîner en C, j'essaye de recoder un shell (seulement les bases : les opérateurs binaires, pipe, et certaines builtins du genre cd, ls, echo ...).

    Seulement voilà, j'aimerais que mon le code de retour de mon shell corresponde au code retour de la référence (bash).
    Pour commencer, j'appelle seulement la fonction execvp.

    J'imagine qu'il faut se servir de la variable globale ERRNO avec les fonctions perror() ou bien errno() mais je ne sais pas comment faire.

    Par exemple, cette ligne de commande doit renvoyer 127 :
    ./mon_shell echo 'toto' | une_commande_qui_n-existe_pas

    Quelqu'un a-t-il une idée ?

    Merci beaucoup

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 472
    Par défaut
    Bonjour,

    Citation Envoyé par pepsi33 Voir le message
    Seulement voilà, j'aimerais que mon le code de retour de mon shell corresponde au code retour de la référence (bash).
    Je ne vois pas ce que tu veux dire ici par « référence ». Peux-tu préciser ?

    Pour commencer, j'appelle seulement la fonction execvp.

    J'imagine qu'il faut se servir de la variable globale ERRNO avec les fonctions perror() ou bien errno() mais je ne sais pas comment faire.

    Par exemple, cette ligne de commande doit renvoyer 127 :
    ./mon_shell echo 'toto' | une_commande_qui_n-existe_pas
    Si tu écris ta commande telle que tu l'as postée ici, tu ne passeras pas « echo 'toto' | une_commande_qui_n-existe_pas » à ton shell, mais uniquement « echo 'toto' » et tu vas piper la sortie de ton shell vers la commande qui n'existe pas. L'erreur se produira donc en amont de ton shell. Chez bash, donc.

    Ceci étant, ton shell s'exécute ensuite comme un processus ordinaire. S'il ne peux accomplir la commande parce que l'un des programmes n'existe pas, c'est à lui de faire un « return 127; » depuis la fonction main(), ou un « exit(127); » d'une manière générale. Cela ne passe pas par errno, ou autre.

  3. #3
    Membre actif
    Inscrit en
    Septembre 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 39
    Par défaut
    Merci pour ta réponse.

    Je ne vois pas ce que tu veux dire ici par « référence ». Peux-tu préciser ?
    En fait, je voulais dire que le code de retour de mon shell doit être identique au code de retour du shell pour une même commande.

    Si tu écris ta commande telle que tu l'as postée ici, tu ne passeras pas « echo 'toto' | une_commande_qui_n-existe_pas » à ton shell, mais uniquement « echo 'toto' » et tu vas piper la sortie de ton shell vers la commande qui n'existe pas. L'erreur se produira donc en amont de ton shell. Chez bash, donc.
    En fait si, je passe bien la commande "echo toto | function" à mon shell.
    Je détecte le caractère '|' et appelle les bonnes fonctions en conséquence.

    Dans le cas d'une fonction correcte, cela marche très bien (genre "cat Malefile | wc -c"). Si la commande n'existe pas ("echo toto | function"), cela m'affiche un message d'erreur (le même que bash). Par contre, je ne sais pas comment récupérer le code de retour.

    Ceci étant, ton shell s'exécute ensuite comme un processus ordinaire. S'il ne peux accomplir la commande parce que l'un des programmes n'existe pas, c'est à lui de faire un « return 127; » depuis la fonction main(), ou un « exit(127); » d'une manière générale. Cela ne passe pas par errno, ou autre.
    Oui je suis tout à fait d'accord mais comment-je fais pour savoir que le code de retour est 127 ?

    En fait, je voudrais récupérer le code de retour de la fonction exevp afin que le code de retour de mon programme soit le même que le code de retour de bash.

    Je sais pas si j'ai réussi à me faire comprendre; en tout cas j'espère.

    Merci d'avance

Discussions similaires

  1. [Mail] codes de retour email
    Par drommk dans le forum Langage
    Réponses: 8
    Dernier message: 26/06/2006, 14h53
  2. [DOS] shell - valeur de retour
    Par Nemehy dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 23/05/2006, 01h01
  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