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 :

Récupérer le résultat d'une commande système en c++


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Récupérer le résultat d'une commande système en c++
    Bonjour
    En C++, je cherche à récupérer le résultat d'une commande système afin de l'exploiter dans la suite de mon programme, prenons par exemple la commande "uname".
    Pour des raisons de sécurité et de robustesse je ne veux pas faire quelque chose du style
    system("uname > fichier") et lire le fichier.
    De même la commande dup2 qui permet de rediriger la sortie standard ne fonctionne qu'avec des handles de fichier pas avec des stream C++.
    J'ai essayé en vain de rédiriger la sortie standard vers un stream en utilisant les méthodes system et fork / execl /execlp mais ça ne fait qu'afficher le résultat de la commande sur la sortie standard et mon flot est toujours vide :

    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
    std::ostringstream oss;
    int kidstatus, deadpid;
    pid_t kidpid = fork();
    if (kidpid == -1) {
      std::cerr << "fork error " << errno << ", "
      << std::strerror(errno) << "\n";
      return 1;
      }
      if (kidpid == 0) {
        oss << execl("/usr/bin/uname","uname", 0); // affiche SunOS
        return 0;
       }
      // we only get here if we're the parent process.
      deadpid = waitpid(kidpid, &kidstatus, 0);
      if (deadpid == -1) {
        std::cerr << "waitpid error " << errno << ", "
        << std::strerror(errno) << "\n";
        return 1;
    }
    std::cout << "child result code: " << WEXITSTATUS(kidstatus)
     
    cout << "oss.str()=" << oss.str() << endl;

    Une suggestion??
    Merci!!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Jette un coup d'oeil aux fonctions popen et pclose de stdio.h. Selon ce que j'ai compris de ce que tu veux faire, c'est la facon de proceder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <stdio.h>
    FILE *popen(const char *command, const char *type);
    int pclose(FILE *stream);

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut c'est bien ça! ... un exemple d'utilisation
    super c'est bien ça que je cherchais ) merci beaucoup
    pour info voilà comment ça peut s'utiliser

    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
      char cmd[20] = "uname";
      char buf1[BUFSIZ]; //BUFSIZ est une constante connue du système
      FILE *ptr;
     
      if ((ptr = popen(cmd, "r")) != NULL)
      {
        while (fgets(buf1, BUFSIZ, ptr) != NULL)
        {
          (void) printf("%s", buf1);
        }
        pclose(ptr);
      }
      else
      {
        fprintf(stderr, "Echec de popen\n");
        exit(1);
      }

    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/03/2011, 16h22
  2. Récupérer le résultat d'une commande scp
    Par vbcasimir dans le forum Linux
    Réponses: 19
    Dernier message: 20/05/2009, 16h14
  3. Récupérer le résultat d'une commande UNIX
    Par luxtin dans le forum Fortran
    Réponses: 2
    Dernier message: 03/10/2007, 11h36
  4. Réponses: 3
    Dernier message: 19/06/2007, 11h27
  5. Récupérer le résultat d'une commande shell
    Par espadon1 dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 10h01

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