/ / C ++ čítať popen error output do reťazca [duplicate] - c ++

C + + čítať popen error výstup do reťazca [duplicate] - c ++

Spúšťam proces cez posix popen() Funkcie. Napr. git push, mkdir x atď.

Môžem čítať výstup z týchto príkazov ľahko tým, že uložíte do vyrovnávacej pamäte takto:

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {

FILE *in;
char buff[512];

if(!(in = popen("mkdir x", "r"))){
return 1;
}

// fgets stores the output into buff
while(fgets(buff, sizeof(buff), in)!=NULL){
cout << buff;
}
pclose(in);

return 0;

}

Ale ak sa vyskytne chyba v procese, napr. mkdir zlyhá, potom chcem čítať chybu do reťazca alebo vyrovnávacej pamäte znakov.

Avšak s vyššie uvedeným kódom, ak to zlyhá, chyba nie je uložená v vyrovnávacej pamäti. Myslím, že je to preto, že chyba je presmerovaná na štandardnú chybu namiesto štandardného vstupu.

Ako môžem upraviť kód uvedený vyššie, aby som dostal chybovú správu vrátenú bash / proces?

odpovede:

2 pre odpoveď č. 1

Môžete zadať presmerovanie v priečinku popen volanie metódy:

popen("mkdir x 2>&1", "r")

Potom budete môcť prečítať chybovú správu z vyrovnávacej pamäte.