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

POSIX C Discussion :

Redirection entrée standard entre deux processus


Sujet :

POSIX C

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 160
    Points
    160
    Par défaut Redirection entrée standard entre deux processus
    Bonjour à tous !

    Je travaille sur une application en ligne de commande sous Windows. Cette application doit se connecter via SSH à un serveur distant et exécuter un script.
    Mon problème, c'est que j'arrive bien à lancer la connexion SSH via le popen (voir le spawnlp), mais je voudrais interagir avec la ligne de commande de l'application SSH, c'est à dire entrer automatiquement(via mon programme) le mot de passe puis entrer le chemin vers le script que je veux appeler.

    Quelqu'un aurait il une idée sur la meilleure méthode à utiliser ?

    Voici mon code pour le moment :

    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
    39
    40
     
    #include "stdafx.h"
    #include "process.h"
    #include <iostream>
    #include <limits> 
    using namespace std;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
       // Connexion au serveur distant
       char   psBuffer[128];
       FILE   *pPipe;
     
       if( (pPipe = _popen( "ssh2 login@XXX.XXX.XXX.XXX", "wt" )) == NULL ) {
    	   exit( 1 );
       }
     
       /* Read pipe until end of file, or an error occurs. */
       while(fgets(psBuffer, 128, pPipe))
       {
          printf(psBuffer);
       }
     
       /* Close pipe and print return value of pPipe. */
       if (feof( pPipe))
       {
         printf( "\nProcess returned %d\n", _pclose( pPipe ) );
       }
       else
       {
         printf( "Error: Failed to read the pipe to the end.\n");
       }
     
      //_spawnlp(_P_WAIT , "ssh2","ssh2","login@XXX.XXX.XXX.XXX", NULL );
     
      // Fin du programme
      cout << "Appuyez sur entrée pour continuer...";
      cin.ignore( numeric_limits<streamsize>::max(), '\n' );
      return 0;
    }
    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Tu utilises _popen en mode écriture "wt" et tu fais une lecture dessus !

    Tu ne peux pas avec _popen établir une communication bidirectionnelle.

    Tu peux peut-être faire en sorte que ton script accepte des arguments d'entrée (ex: le mot de passe) et utiliser le _popen en mode "rt" pour lire le résultat ?

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 160
    Points
    160
    Par défaut
    ooops, autant pour moi. A force d'essayer différent trucs, ca n'est plus cohérent. Ok pour la lecture, d'après ce que tu viens de me dire, je devrais utiliser autre chose, mais quoi ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Je viens de rajouter une ligne à mon message (en réponse à ta dernière question).

    En résumé:

    -> tu fais en sorte que ton script accepte des arguments
    tu construis dynamiquement le premier argument de ton _popen en fonction des arguments à passer à ton script
    tu lis le résultat via _popen(...,"rt");

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Je te suggere de faire deplacer la question dans le forum Windows.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

Discussions similaires

  1. Communication par pipe entre deux processus
    Par mohamedz dans le forum POSIX
    Réponses: 9
    Dernier message: 02/03/2010, 17h50
  2. redirection d'entrées/sorties entre deux processus
    Par sunmat dans le forum Bibliothèque standard
    Réponses: 1
    Dernier message: 16/11/2008, 15h35
  3. Redirection de l'entrée standard
    Par steeve93800 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/02/2008, 13h40
  4. Transférer un tableau entre deux processus
    Par piziwate dans le forum Réseau
    Réponses: 10
    Dernier message: 12/12/2007, 15h11
  5. Redirection entrée standard avant EXEC
    Par AllyKo dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 14/05/2007, 09h35

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