Como capturar o exit_code e stderr do comando que é executado em C ++?

Estou escrevendo um programa em c ++ que executa e gera (em tempo real) um script de shell, makefile ou apenas outro programa. No entanto, eu gostaria de ter meu programa retornar de forma diferente quando há erros ou nenhum erro.

#include "execxi.h"



using namespace std;


int execXI::run(string command)
{

    FILE *in;
    char buff[512];
    // is this the check for command execution exited with not 0?
    if(!(in = popen(command.c_str(), "r"))){
            // I want to return the exit code and error message too if any
        return 1;
    }
    // this part echoes the output of the command that's executed
    while(fgets(buff, sizeof(buff), in)!=NULL){
        cout << buff;
    }
    pclose(in);
    return 0;



}

é o que eu tenho até agora.

Digamos que este script foi executadomake para construir um programa e deu um erro assim

on_target_webkit_version out/Release/obj/gen/webkit_version.h
Traceback (most recent call last):
  File "../build/webkit_version.py", line 107, in <module>
    sys.exit(main())
  File "../build/webkit_version.py", line 103, in main
    return EmitVersionHeader(*sys.argv[1:])
  File "../build/webkit_version.py", line 86, in EmitVersionHeader
    webkit_revision = GetWebKitRevision(webkit_dir, version_file)
  File "../build/webkit_version.py", line 60, in GetWebKitRevision
    version_info = lastchange.FetchVersionInfo(
AttributeError: 'module' object has no attribute 'FetchVersionInfo'
make: *** [out/Release/obj/gen/webkit_version.h] Error 1

É possível para mim saber que isso saiu com erro?

Isso sai com códigoelse than 0 desde que é um erro?

Essa última parte é produzida emstderr?

Considerando quemake saiu com código não0, Digamos1, e saída emstderr não é possível capturar esses códigos de saída e mensagens de erro no final?

Como posso capturar o código de saída estderr depois de produzir os resultados do programa, e devolver oexit code/ stderr na função?

questionAnswers(3)

yourAnswerToTheQuestion