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 :

[Débutant] Implémentation commande echo


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut [Débutant] Implémentation commande echo
    bonjour,

    alors voilà je débute en C car je dois l'apprendre dans le cadre d'un cours d'architecture des systèmes d'exploitation .

    alors un petit énoncé de tp était de faire une implémentation de la commande echo (shell) en C sauf qu'elle devait se baser sur l'entrée standard (pas comme la commande echo justement) .

    J'ai tout de suite pensé à un bête passage par argument comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* Implementation de la commande echo en C */
     
    #include <stdio.h>
     
    int main(int argc, char *argv[])
    {
       int i;
       for (i=1; i < argc; i++)
         { printf("%s ",argv[i]); }
       printf("\n");
       return 0;
    }
    mais la redirection d'entrée standard ne fonctionne pas, tout comme pour la commande echo .

    exemple:

    ./eko bonjour

    me donne bien : bonjour

    mais ./eko < bonjour.txt

    où bonjour.txt contient bonjour
    ne me donne rien

    c'est logique en fait je crois vu que je passe par argument mais y à t'il moyen de prendre en compte cette redirection quand même?

    merci

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Bonjour,

    exemple:
    ./eko bonjour
    me donne bien : bonjour

    mais ./eko < bonjour.txt
    où bonjour.txt contient bonjour
    ne me donne rien
    Comme tu dis, c'est normal.

    Pour que l'entrée standard soit prise en compte, il faudrait que tu la lises (par un fgets par exemple).
    Pour t'aider, tu peux jeter un oeil ici : http://emmanuel-delahaye.developpez....tes.htm#saisie

    Tu peux regarder s'il y a des arguments, alors tu les affiches; et sinon, tu lis l'entrée standard et tu affiches ce que tu as lu.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Tuxico
    mais ./eko < bonjour.txt
    C'est ce fonctionnement que tu veux ?

    Alors il n'y a rien à faire d'autre que d'écrire du code pour 'stdin'.

    Ce qu'il faut comprendre, c'est que sur la ligne de commande, '< fichier' n'est pas un paramètre mais une indirection qui est gérée par ton système (tu devrais connaitre un peu mieux l'utilisation de ton système, sinon, tu vas tout mélanger...).

    C'est lui qui va ouvrir le fichier en lecture texte et se substituer au stdin par défaut (ton clavier, par exemple).

    Un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       int c;
       while ((c = getchar()) != EOF)
       {
          putchar (c);
       }
    devrait suffire.

    (Ca doit être l'un des premiers exercices du K&R...)

  4. #4
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut
    merci à vous,

    le problème est que maintenant si je tape :

    ./eko bonjour

    il attend une entrée clavier avant de la renvoyer, hors je vuex qu'il affiche directement bonjour comme avant .

    exemple de ce qu'il fait maintenant :

    ./eko bonjour
    hello
    hello

    ce que je veux :

    ./eko bonjour
    bonjour

    pour la redirection d'entrée, ça marche

    merci. (désolé pour ces bêtes question, mais apsser du pascal au C, ca change )

  5. #5
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Tuxico
    le problème est que maintenant si je tape :
    ./eko bonjour
    il attend une entrée clavier avant de la renvoyer, hors je vuex qu'il affiche directement bonjour comme avant .
    Teste le nombre d'arguments (argc). S'il y en a au moins un, affiches-les. Sinon, "attend une entrée clavier".

  6. #6
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut
    oui c'est ce que j'ai fait en attendant ta réponse merci à toi et à Emmanuel

  7. #7
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Tuxico
    oui c'est ce que j'ai fait en attendant ta réponse merci à toi et à Emmanuel
    Et ça marche ?
    Si oui, penses au tag RESOLU.
    Si non, poste le code, qu'on y jette un oeil.

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

Discussions similaires

  1. [Débutant] implémentation d'Iterator
    Par nanath02 dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2007, 12h42
  2. Aide avec commande ECHO
    Par lafmart dans le forum Langage
    Réponses: 1
    Dernier message: 04/02/2007, 06h06
  3. [Batch][Débutant] Date et echo
    Par venomelektro dans le forum Windows
    Réponses: 2
    Dernier message: 19/08/2006, 14h38
  4. Réponses: 7
    Dernier message: 17/05/2006, 12h20
  5. Comment aller a la ligne avec la commande ECHO
    Par juflata dans le forum Windows
    Réponses: 3
    Dernier message: 23/06/2004, 17h11

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