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.

  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

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