Bonjour,
J'aimerais récupérer dans mon programme l'entrée :
Une simple utilisation du std::cin ne pourrait pas suffire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part netstat -an > MonProg.exe param1 param2
Bonjour,
J'aimerais récupérer dans mon programme l'entrée :
Une simple utilisation du std::cin ne pourrait pas suffire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part netstat -an > MonProg.exe param1 param2
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.
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 !
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).
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"
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
dans mon script
Code : Sélectionner tout - Visualiser dans une fenêtre à part MonProg.exe "netstat -an"
et
dans mon code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part system(argv[1]);
Mais comment récupérer la sortie standard et la sortie err de cette commande du coup ?
Parce qu'unpour ensuite lire le/les fichiers de sortie je ne trouve pas ça optimal du tout !
Code : Sélectionner tout - Visualiser dans une fenêtre à part system("netstat -an > out 2> err");
Merci de votre aide en passant
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
Rebonjour,
Le problème n'étant pas comment faire pour aboutir à mes fins mais comment utiliser l'entrée standard, mon exemple :
était aberrant, c'est vrai.
Code : Sélectionner tout - Visualiser dans une fenêtre à part netstat -an > MonProg.exe param1 param2
Mais avec un '|' est-ce toujours impossible ?
Je ne l'ai pas mentionné explicitement mais l'exécutable est fait pour être utilisé sur Windows et dans des scripts (.bat).
Code : Sélectionner tout - Visualiser dans une fenêtre à part netstat -an | MonProg.exe param1 param2
Merci de m'éclairer
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').
Salut,
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 :
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).
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; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager