¿Cómo capturar el código de salida y el comando stderr del comando que se ejecuta en C ++?

Estoy escribiendo un programa c ++ que ejecuta y genera (en tiempo real) un script shell, makefile o simplemente otro programa. Sin embargo, me gustaría que mi programa regrese de manera diferente cuando hay errores o ningún error.

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



}

Es lo que tengo hasta ahora.

Digamos que este script corriómake para construir un programa y dio un error como tal

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

¿Es posible que sepa que esto salió con error?

¿Eso sale con código?else than 0 ya que es un error?

Es que la última parte de salida enstderr?

Teniendo en cuenta quemake Salido con código no0, digamos1, y sale enstderr ¿No me es posible capturar estos códigos de salida y el mensaje de error al final?

¿Cómo puedo capturar el código de salida ystderr después de emitir los resultados del programa, y ​​devolver elexit code/ stderr en la funcion?

Respuestas a la pregunta(3)

Su respuesta a la pregunta