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 :

Recuperation status de la commande execute dans le popen


Sujet :

POSIX C

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Recuperation status de la commande execute dans le popen
    Bonjour,

    J'aimerais pouvoir recuperer le status de la commande lancee dans un ssh depuis un popen !
    Je met un bout de code pour expliciter mon probleme :

    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
     
    int main()
    {
      char buf1[BUFSIZ]; //BUFSIZ est une constante connue du système
      FILE *ptr;
     
      if ((ptr = popen("ssh server@192.168.0.45 -t 'ls srysydl'", "r")) != NULL)
      {
        while (fgets(buf1, BUFSIZ, ptr) != NULL)
        {
          (void) printf("-%s", buf1);
        }
        pclose(ptr);
      }
      else
      {
        fprintf(stderr, "Echec de popen\n");
        exit(1);
     }
    }
    La commande 'ls ...' doit echouer car mon repertoire nexiste pas mais jaimerais pouvoir savoir si elle a echouer ou non

    Quelqu'un a t il la solution ? :s

  2. #2
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut,
    Bein faut croire que c'est pas possible... Le seul moyen que je vois c'est d'utiliser system(), de rediriger la sortie standard de la commande sur un fichier temporaire puis de lire ce fichier temporaire

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Juanes Voir le message
    Bonjour,

    J'aimerais pouvoir recuperer le status de la commande lancee dans un ssh depuis un popen !
    Je met un bout de code pour expliciter mon probleme :

    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
     
    int main()
    {
      char buf1[BUFSIZ]; //BUFSIZ est une constante connue du système
      FILE *ptr;
     
      if ((ptr = popen("ssh server@192.168.0.45 -t 'ls srysydl'", "r")) != NULL)
      {
        while (fgets(buf1, BUFSIZ, ptr) != NULL)
        {
          (void) printf("-%s", buf1);
        }
        pclose(ptr);
      }
      else
      {
        fprintf(stderr, "Echec de popen\n");
        exit(1);
     }
    }
    La commande 'ls ...' doit echouer car mon repertoire nexiste pas mais jaimerais pouvoir savoir si elle a echouer ou non

    Quelqu'un a t il la solution ? :s
    Il y a deux problèmes à résoudre
    Tout d'abord ton popen() ne récupère pas un status mais un affichage. il récupère ce que la commande "ssh" affiche et ce n'est pas la même chose qu'un status.
    De plus, même si la commande lancée à l'autre bout échoue, ton ssh lui, aura réussi et donc ton popen() fonctionnera.

    Il faut que t'arrives, avec le ssh, à détecter que la commande distante a réussie ou échouée et que tu fasses remonter cette info à l'appelant. Ainsi ton popen() pourra être au courant.

    J'ai pas vraiment de solution miracle mais tu peux essayer d'aller vers des commandes de ce style
    ssh serveur -t "ls machin || echo bad" et essayer de traiter avec ton popen() le retour de ce ssh.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Execution d'une commande telnet dans un script sh
    Par Nospher dans le forum Linux
    Réponses: 17
    Dernier message: 23/08/2011, 15h30
  2. [Thread] Recuperer le Thread qui s'execute dans la methode run()
    Par facilus68 dans le forum Général Java
    Réponses: 3
    Dernier message: 06/02/2009, 14h37
  3. Commande sh permettant de récupérer le nom d'un fichier dans un repertoire
    Par Actarus78 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/09/2006, 17h18
  4. Réponses: 7
    Dernier message: 30/08/2006, 11h07
  5. Réponses: 22
    Dernier message: 09/12/2005, 21h27

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