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 № 1Moż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.