Аз отварям процес през posix popen()
функция. Например git push, mkdir x и т.н.
Мога да прочета изхода от тези команди лесно, като го запазя в буфер като този:
#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;
}
Но тогава, ако има грешка в процеса, напр. mkdir не успее, тогава искам да прочета грешката в низ или буфер на букви.
Въпреки това, с кода по-горе, ако тя не успее, грешката не се съхранява в буфера. Мисля, че това е така, защото грешката е пренасочена към стандартна грешка вместо стандартния вход.
Как мога да променя горния код, за да се върне съобщението за грешка от bash / процеса?
Отговори:
2 за отговор № 1Можете да посочите пренасочване в popen
извикване на метод:
popen("mkdir x 2>&1", "r")
След това бихте могли да прочетете съобщението за грешка от буфера.