C ejecutar progtwig externo y obtener el resultado.

En C, ¿cómo debo ejecutar un progtwig externo y obtener sus resultados como si se ejecutara en la consola?

si hay un ejecutable llamado dummy, y muestra un número de 4 dígitos en el símbolo del sistema cuando se ejecuta, quiero saber cómo ejecutar ese ejecutable y obtener el número de 4 dígitos que generó. Cía.

Popen () maneja esto muy bien. Por ejemplo, si desea llamar algo y leer los resultados línea por línea:

char buffer[140]; FILE *in; extern FILE *popen(); if(! (in = popen(somecommand, "r"""))){ exit(1); } while(fgets(buff, sizeof(buff), in) != NULL){ //buff is now the output of your command, line by line, do with it what you will } pclose(in); 

Esto me ha funcionado antes, espero que sea útil. Asegúrate de incluir stdio para usar esto.

Puedes usar popen() en UNIX.

Esto no es realmente algo que ISO C pueda hacer por sí solo (con esto quiero decir que el estándar en sí mismo no proporciona esta capacidad), posiblemente la solución más portátil es simplemente ejecutar el progtwig, redirigiendo su salida estándar a un archivo, como:

 system ("myprog >myprog.out"); 

luego use el estándar ISO C fopen/fread/fclose para leer esa salida en una variable.

Esta no es necesariamente la mejor solución, ya que puede depender del entorno subyacente (e incluso la capacidad de redirigir la salida es específica de la plataforma), pero pensé que la agregaría para completarla.

Hay popen() en unix como se mencionó anteriormente, lo que le da un FILE* para leer.

Alternativamente, en unix, puede usar una combinación de pipe() , fork() , exec() , select() , y read() , y wait() para realizar la tarea de una manera más general / flexible.

La popen biblioteca de popen invoca un fork y un pipe debajo del capó para hacer su trabajo. Usándolo, está limitado a simplemente leer lo que sea que se voltee en el proceso a la salida estándar (que podría usar el shell subyacente para redirigir). Usando las funciones de nivel inferior, puedes hacer casi lo que quieras, incluso leer stderr y escribir stdin.

En Windows, vea llamadas como CreatePipe() y CreateProcess() , con los miembros de IO de STARTUPINFO configurados en sus tuberías. Puede obtener un descriptor de archivo para hacer read() usando _open_ofshandle() con el identificador de proceso. Dependiendo de la aplicación, es posible que necesites leer subprocesos múltiples, o puede que esté bien bloquear.