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 :

[Demande Piste] Double redirection en lecture


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut [Demande Piste] Double redirection en lecture
    Bonjour,

    J'essaye d'effectuer une double redirection en lecture cependant je galère pas mal ...
    Exemple :
    wc << END
    Je tape
    du texte
    END (marque la fin de fichier)
    Résultat =>2 4 17

    A noté que toutes mes redirection fonctionne parfaitement, >, >>, <.
    Pour la double passez-vous par des pipes ?

    Merci pour vos conseils.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    c'est quoi, une "double redirection en lecture"? une heredoc?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Dans ton exemple avec "wc", c'est simplement de l'information transmise sur l'entrée standard de la commande.
    La gestion de la chaîne "END" est entièrement à la charge du shell et n'est jamais vue par la commande "wc".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    c'est quoi, une "double redirection en lecture"? une heredoc?
    Oui.

    Dans ton exemple avec "wc", c'est simplement de l'information transmise sur l'entrée standard de la commande.
    La gestion de la chaîne "END" est entièrement à la charge du shell et n'est jamais vue par la commande "wc".
    Je comprend bien la chose, cependant c'est moi qui dois transmettre faire en sorte que les données soient transmise à la commande wc. Ma question est donc, comment transmet tu l'information sur l'entrée standard ?

    Mon approche est la suivante :
    Je fork, le père lit les informations transmises sur l'entrée standard, chaque lignes lu est écrite dans le tube (jusqu'a la "fin de fichier" marquer par l'envoi du mot clé choisis lors de la commande, "END" dans l'exemple précédent).
    Le fils quand à lui redirige l'entrée standard vers le tube afin que les données écrite dans le tube soit lu par wc (qui lit par défaut son entrée standard).

    Qu'en pensez-vous ?

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    cette redirection "here doc" est en fait un remplissage "en place" de l'entrée standard.
    Ca marche exactement comme si tu faisais un "echo truc| wc", sauf pour des considérations d'échappement.

    C'est une considération du shell. Pas de wc, qui ne vois qu'un "std::cin"

    Tu peux utiliser un fichier intermédiaire, un pipe (ce qui reviens au même).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Une idée ?
    Bonjour,

    Merci, ça fonctionne parfaitement

    J'ai une dernière question au cas ou que tu arrives à ciblé le "problème". Je m'attaque à la redirection avec fichier multiples (concernant toujours l'entrée standard). Cependant il y a un comportement que je ne trouve pas logique, peux-tu me dire ce que tu en penses ?
    Je créer 3 fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "Bonjour developpez.com" > file1
    echo "Au revoir developpez.com " > file2
    echo "Bonne nuit developpez.com" > file3
    J'effectue la redirection dont je te parle plus haut :
    Résultat obtenu :
    1 3 26 file2
    1 3 26 file3
    2 6 52 total

    1. Pourquoi file1 n'apparait pas ? (ces toujours le premier fichier qui n'apparait pas).
    2. Comment le total est calculer ? De mon coté, il n'y a pas de ligne total...


    J'attire sur ton attention que tout cela est testé dans un shell C à savoir tcsh. Quoi qu'il en soit merci car le problème initial est résolu

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Dans la commande
    l'entrée standard < file1 est ignorée car il y a les arguments file2 file3.

    Donc "file1" est ignoré car tu passes des arguments à la commande.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

    Citation Envoyé par sbill Voir le message
    J'effectue la redirection dont je te parle plus haut :
    Résultat obtenu :
    1 3 26 file2
    1 3 26 file3
    2 6 52 total

    1. Pourquoi file1 n'apparait pas ? (ces toujours le premier fichier qui n'apparait pas).
    2. Comment le total est calculer ? De mon coté, il n'y a pas de ligne total...
    Parce que la syntaxe « wc < file1 file2 file3 » est incorrecte. Tu ne peux pas rediriger plusieurs fichiers à la fois vers l'entrée standard (à moins de les concaténer au préalable avec cat, dont c'est la fonction, mais tu ne verrais alors qu'un seul flux), pas plus que tu ne peux rediriger la sortie vers plusieurs flux à la fois (on utilise tee pour cela). En outre, lorsque tu fais une redirection, c'est le shell lui-même qui se charge de connecter le fichier concerné à l'entrée standard de l'exécutable à lancer. Celui-ci n'a alors pas de moyen direct de savoir si son entrée standard est celle par défaut (le clavier) ou si elle a été explicitement redirigée.

    Par contre, la plupart des programmes capables de gérer un flux le font soit à travers l'entrée standard à défaut d'autres informations, soit en ouvrant eux-mêmes un fichier quand son nom est explicitement spécifié en argument, et même de le faire itérativement, l'un après l'autre, quand plusieurs fichiers sont spécifiés.

    Dans l'exemple en question, le shell redirige donc « file1 » vers l'entrée standard et passe « file2 file3 » en argument à ton programme. Comme celui-ci voit qu'on lui en passe, il ouvre directement les fichiers concernés sans se soucier de l'entrée standard.

    (Edit: crosspost avec dinobogan).

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Merci.
    Merci à tous !

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

Discussions similaires

  1. Shell double redirection
    Par Sango64 dans le forum Unix
    Réponses: 4
    Dernier message: 21/11/2011, 09h37
  2. Réponses: 0
    Dernier message: 09/10/2008, 14h45
  3. [VB.NET]Double redirection.
    Par CammCamm dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2003, 15h11

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