Yo eso lo hacía redireccionando la salida a un archivo y leyendolo desde el programa, por ejemplo, este programa que ejecuta en linux el gcc y compila un archivo, y luego saca los errores, este justo es bastante inutil pero sirve como ejemplo:
Este es el programa:
#include <stdio.h>
int main(int argc, char *argv[])
{
system("gcc acompilar.c -o Main > archivo.txt 2>&1");
FILE *fichero;
char letra;
fichero = fopen("archivo.txt","r");
if (fichero==NULL)
{
printf( "No se puede abrir el fichero.\n" );
exit( 1 );
}
printf( "Contenido del fichero:\n" );
letra=getc(fichero);
while (feof(fichero)==0)
{
printf( "%c",letra );
letra=getc(fichero);
}
if (fclose(fichero)!=0)
{
printf( "Problemas al cerrar el fichero\n" );
}
return 0;
}
Este es el archivo en C que le paso al gcc, con un fallo para que haya salida por stderr
#include <stdio.h>
int main(int argc, char *argv[])
{
printf(FALLOGARRAFAL);
return 0;
}
Si ejecutamos el programa se obtiene:
laptop:~$ ./a.out
Contenido del fichero:
acompilar.c: In function ‘main’:
acompilar.c:6: error: ‘FALLOGARRAFAL’ undeclared (first use in this function)
acompilar.c:6: error: (Each undeclared identifier is reported only once
acompilar.c:6: error: for each function it appears in.)
Y efectivamente en el archivo archivo.txt tenemos los fallos que nos ha mostrado antes.
acompilar.c: In function ‘main’:
acompilar.c:6: error: ‘FALLOGARRAFAL’ undeclared (first use in this function)
acompilar.c:6: error: (Each undeclared identifier is reported only once
acompilar.c:6: error: for each function it appears in.)