/ / C ++ odczytuje dane wyjściowe błędu popen w ciągu [duplikat] - c ++

C ++ odczytuje wynik błędu popen na łańcuch [duplicate] - c ++

Otwieram proces za pomocą posix popen() funkcjonować. Na przykład. git push, mkdir x itp.

Mogę łatwo odczytać dane wyjściowe z tych poleceń, przechowując je w buforze takim jak ten:

#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 jeśli wystąpi błąd w procesie, np. mkdir kończy się niepowodzeniem, a następnie chcę odczytać błąd w buforze ciągów lub znaków.

Jednak z powyższym kodem, jeśli się nie powiedzie, błąd nie jest przechowywany w buforze. Myślę, że dzieje się tak, ponieważ błąd jest przekierowywany na błąd standardowy zamiast standardowego wejścia.

Jak zmodyfikować powyższy kod, aby komunikat o błędzie został zwrócony przez bash / proces?

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz określić przekierowanie w popen wywołanie metody:

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

Będziesz wtedy mógł odczytać komunikat o błędzie z bufora.