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 :

Utilisation du flux d'entrée


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Utilisation du flux d'entrée
    Bonjour,


    J'aimerais récupérer dans mon programme l'entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netstat -an > MonProg.exe param1 param2
    Une simple utilisation du std::cin ne pourrait pas suffire ?

  2. #2
    Membre du Club Avatar de Krell
    Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Points : 42
    Points
    42
    Par défaut
    cin c'est la lecture du clavier.

    Sinon tu as la fonction system() qui permet d'éxécuter des commandes de la console depuis l'application. Tu rediriges vers un fichier et il te reste plus qu'à lire la réponse avec un flux fstream.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse si rapide.

    C'est vrai, je pourrais utiliser cette méthode là mais je suis convaincu qu'il est possible de faire ce que je veux en utilisant le flux d'entrée.

    Théoriquement c'est très simple il doit bien exister une fonction/méthode pouvant lire le buffer d'entrée !

  4. #4
    Membre du Club Avatar de Krell
    Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Points : 42
    Points
    42
    Par défaut
    Tu ne pourras pas seulement avec un simple cin, le flux de clavier ne sert qu'a saisir au clavier via la console.

    http://www.cplusplus.com/reference/iostream/cin/

    Ensuite si tu veux utiliser netstat pour voir quel connexion sont établies tu peux toujours utiliser des bibliotheques qui test la connexion sur un port (selon l'OS sur lequel tu programmes et ce que tu souhaite faire).

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 41
    Points
    41
    Par défaut
    Et avec argc, argv ?

    int main (int argc, char **argv)

    argc est le nombre de paramètres
    argv est le tableau de paramètres mais attention argv[0] est le nom du programme

    argv[0] = "MonProg.exe"
    argv[1] = "param1"
    argv[2] = "param2"

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Krell Voir le message
    Tu ne pourras pas seulement avec un simple cin, le flux de clavier ne sert qu'a saisir au clavier via la console.

    http://www.cplusplus.com/reference/iostream/cin/

    Ensuite si tu veux utiliser netstat pour voir quel connexion sont établies tu peux toujours utiliser des bibliotheques qui test la connexion sur un port (selon l'OS sur lequel tu programmes et ce que tu souhaite faire).

    Oui, mon programme ayant pour objectif d'être utilisé par un script, netstat n'est qu'un exemple, comme ce pourrait être xcopy ou un programme de recherche de fichier en ligne de commande.

    Mon problème peut peut-être être résolu avec un read pour lire le flux 0 n'est-il pas ?

  7. #7
    Membre du Club Avatar de Krell
    Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Points : 42
    Points
    42
    Par défaut
    As tu essayé la solution proposé par ArthurG ? Si tu veux rediriger le flux d'une commande vers un programme(ou fichier) en une ligne de commande tu vas devoir utiliser argc et argv

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Krell Voir le message
    As tu essayé la solution proposé par ArthurG ? Si tu veux rediriger le flux d'une commande vers un programme(ou fichier) en une ligne de commande tu vas devoir utiliser argc et argv
    Ok, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonProg.exe "netstat -an"
    dans mon script
    et
    dans mon code.

    Mais comment récupérer la sortie standard et la sortie err de cette commande du coup ?

    Parce qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("netstat -an > out 2> err");
    pour ensuite lire le/les fichiers de sortie je ne trouve pas ça optimal du tout !

    Merci de votre aide en passant

  9. #9
    Membre du Club Avatar de Krell
    Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Points : 42
    Points
    42
    Par défaut
    Si tu veux optimiser dans ce cas n'utilise pas system(), mais plutôt la bibliothèque termio.h(sur Windows) ou termios.h (sur linux).

    Si je me souvient bien ça permet de contrôler les terminaux, peut être que tu y trouveras ton bonheur dans cette bibliothèque , tient nous au courant

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Rebonjour,

    Le problème n'étant pas comment faire pour aboutir à mes fins mais comment utiliser l'entrée standard, mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netstat -an > MonProg.exe param1 param2
    était aberrant, c'est vrai.
    Mais avec un '|' est-ce toujours impossible ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netstat -an | MonProg.exe param1 param2
    Je ne l'ai pas mentionné explicitement mais l'exécutable est fait pour être utilisé sur Windows et dans des scripts (.bat).

    Merci de m'éclairer

  11. #11
    Membre régulier Avatar de Tiger-222
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 76
    Points : 106
    Points
    106
    Par défaut
    Bonjour matyu,

    C'est possible en utilisant getline sur cin :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string ligne;
    while ( getline(cin, ligne) ) {
    	if ( ligne.length() > 0 ) {
    		cout << ligne << endl;
    	}
    }

    Tu peux spécifier le caratère de fin de ligne tel que getline(cin, ligne, '\n').

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par Krell Voir le message
    cin c'est la lecture du clavier.
    Non. std::cin lit à partir du flux d'entrée. Le flux d'entrée peut correspondre à une saisie clavier ou pas. argc/argv sont liés aux paramètres de la ligne d'exécution et sont différents.

    Exemple :
    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
    32
    33
    34
    35
    36
    37
    38
    #include <iostream>
    #include <string>
    static const std::size_t nbr_ligne = 10;
    void input()
    {
       std::string ligne;
       for(std::size_t i =0;i<nbr_ligne;++i)
       {
          std::getline(std::cin,ligne);
          std::cout<<"copie de" << ligne<<"\n";
       }
    }
     
    void output()
    {
       for(std::size_t i =0;i<nbr_ligne;++i)
       {
          std::cout<<" ligne n "<<i<<"\n";
       }
    }
     
    int main(int argc, char*argv[])
    {
       if(argc>=2)
       {
          switch(*argv[1])
          {
          case 'i':
             input();
             break;
          case 'o':
             output();
             break;
          }
       }
     
       return 0;
    }
    Ensuite tu exécutes dans ta fenêtre DOS : prog.exe o | prog.exe iLa sortie standard (std::cout) du premier appel (prog.exe o) est redirigée vers l'entrée standard (std::cin) du second appel (prog.exe i).

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

Discussions similaires

  1. flux d'entrée caractere &
    Par kassim34 dans le forum Flex
    Réponses: 1
    Dernier message: 31/07/2007, 18h02
  2. image à partir du flux d'entrée standard
    Par gege64 dans le forum Qt
    Réponses: 2
    Dernier message: 05/11/2006, 19h14
  3. Réponses: 3
    Dernier message: 08/08/2006, 03h50
  4. [Debutant] Utilisation de la touche "Entrée"
    Par Dextro dans le forum Composants
    Réponses: 2
    Dernier message: 28/04/2005, 10h42
  5. Envoi d'un flux audio entre 2 PC
    Par TheDarkLewis dans le forum Windows
    Réponses: 2
    Dernier message: 30/08/2004, 03h02

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