/ / C ++ leggere l'output dell'errore popen nella stringa [duplicato] - c ++

C ++ legge l'output dell'errore popen in stringa [duplicato] - c ++

Sto aprendo un processo tramite il posix popen() funzione. Per esempio. git push, mkdir x, ecc.

Posso leggere facilmente l'output di questi comandi memorizzandolo in un buffer come questo:

#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;

}

Ma poi se c'è un errore nel processo, ad es. mkdir fallisce, quindi voglio leggere l'errore in una stringa o in un buffer di caratteri.

Tuttavia, con il codice sopra, se fallisce, l'errore non viene memorizzato nel buffer. Penso che sia perché l'errore viene reindirizzato all'errore standard anziché allo standard input.

Come posso modificare il codice sopra per ottenere il messaggio di errore restituito da bash / the process?

risposte:

2 per risposta № 1

È possibile specificare il reindirizzamento in popen chiamata al metodo:

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

Saresti quindi in grado di leggere il messaggio di errore dal buffer.