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.
Utilisez 'popen' au lieu de' system', puis lisez de stdin à votre chaîne –
@Paul R - c'est une bien meilleure idée que la mienne, imo –
@Steve: merci - J'aurais fait une réponse mais je ' Je ne suis pas suffisamment familier avec Windows pour savoir s'il a 'popen'. –