2010-10-22 7 views
1

Pendant que je effectuez les opérations suivantes:Comment puis-je enregistrer la sortie de la fonction système à une chaîne

system("ifconfig -a | grep inet | " 
      "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " 
      " > address.txt") ; 

Je reçois la sortie dans un fichier. Comment puis-je attribuer la sortie à une variable.

+4

Utilisez 'popen' au lieu de' system', puis lisez de stdin à votre chaîne –

+1

@Paul R - c'est une bien meilleure idée que la mienne, imo –

+0

@Steve: merci - J'aurais fait une réponse mais je ' Je ne suis pas suffisamment familier avec Windows pour savoir s'il a 'popen'. –

Répondre

1

EDIT: la meilleure façon de faire cela comme recommandé dans le commentaire de @Paul R, est d'utiliser _popen et de lire dans la sortie de la commande de stdin. Il y a un exemple de code sur cette page MSDN.

EFFORT ORIGINAL:

Une option serait de créer un fichier temporaire en utilisant tmpnam_s, rédigez votre sortie il y a au lieu du nom de fichier coder en dur, puis le relire à partir du fichier dans un std::string, la suppression de la température déposer une fois que vous avez terminé. Basé sur l'exemple de code MSDN:

#include <stdio.h> 
#include <stdlib.h> 
#include <fstream> 
#include <sstream> 

int main(void) 
{ 
    char name1[L_tmpnam_s]; 
    errno_t err; 

    err = tmpnam_s(name1, L_tmpnam_s); 
    if (err) 
    { 
     printf("Error occurred creating unique filename.\n"); 
     exit(1); 
    } 
    stringstream command; 
    command << "ifconfig -a | grep inet | " << 
      "sed 's/\\([ ]*[^ ]*\\)\\([ ]*[^ ]*\\).*$/\\1 \\2/' " << 
      " > " << (const char*)name1; 
    system(command.str().c_str()); 

    { 
    ifstream resultFile((const char*)name1); 
    string resultStr; 
    resultFile >> resultStr; 

    cout << resultStr; 
    } 
    ::remove(name1); 
} 

Ce code utilise plus que je ne habituellement le CRT, mais vous semblez avoir une méthodologie que vous souhaitez utiliser qui repose sur ce point.

Questions connexes