elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?] Volcado del output al usar system en una variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] Volcado del output al usar system en una variable  (Leído 2,467 veces)
ElTioBatiste

Desconectado Desconectado

Mensajes: 2


Ver Perfil
[?] Volcado del output al usar system en una variable
« en: 8 Junio 2017, 23:01 pm »

Buenos dias! Estoy actualmente programando en C/C++ y resulta que tengo que llamar a un programa para generar unos ficheros. Para hacer esto, utilizo la funcion system lo cual viene de perlas porque así el codigo no continua hasta que el programa "llamado" ha acabado. Ahora bien, el programa al que llamo, tarda bastante en ejecutarse (+de 15 min). Por lo tanto es necesario dar unas especie de "feedback" al usuario. El programa que se ejecuta normalmente, da outputs a la consolo la funcion "system" no crea una consola estos se pierden. Hasta ahora las diferentes alternativas que veo serian:
    - 1a Opcion: Volcar los outputs en un .txt (mediante el >) y en el "system" poner un & para que la aplicacion pueda continuar (sé que esto funciona en linux pero alguien me podria confirmar si funciona en windows tambien?). Contando que el anderson funcione con windows, el problema seria como hacer el "while" que va haciendo el output para que no pare hasta que se acabe el proceso, sin contar que no me parece muy sano abrir y leer un archivo que esta en proceso de ser modificado.
    - 2a Opcion: Conseguir, de alguna forma, que los outputs vayan a un buffer/char y poderlos sacar a pantalla con el fprint. Aunque desconozco si esto es posible y como se haria el loop que detecta si el programa ha hecho un nuevo output y lo saca por pantalla hasta que el programa deje de ejecutarse.
     - 3a Opcion: La cual me parece la mas sana y la menos alocada, conseguir crear una terminal para este programa (si puede ser aunque el programa se ejecute en windows o en linux) y que así mostrase los outputs del proceso y se cerrase al acabar el programa.
Muchas gracias por haber dedicado su tiempo a leer el post y agradeceria sinceramente toda la ayuda que me pudiesen dar!
Pasen un dia magnífico!


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: [?] Volcado del output al usar system en una variable
« Respuesta #1 en: 9 Junio 2017, 01:48 am »

Una respuesta esta aquí: https://stackoverflow.com/questions/7292642/grabbing-output-from-exec

Adaptando el código:
Supongamos un programa llamado 'd', que será el llamado que está en el mismo directorio que el programa principal 'c', quien recibe la salida del primero.

d
Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int main() {
  5. for(unsigned i = 0; i < UINT_MAX; ++i)
  6. printf("%u\n", i);
  7. }

c
Código
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/wait.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6.  
  7. int main() {
  8.    int link[2];
  9.    pid_t pid;
  10.    char salida[4096];
  11.  
  12.    pipe(link);
  13.    pid = fork();
  14.  
  15.    if(pid) {
  16.        int status;
  17.        int nbytes;
  18.  
  19.        close(link[1]);
  20.        printf("Salida del hijo:\n");
  21.  
  22.        do {
  23.            nbytes = read(link[0], salida, sizeof(salida));
  24.            printf("%.*s", nbytes, salida);
  25.            waitpid(-1, &status, WNOHANG);
  26.        } while(WIFEXITED(status));
  27.        printf("Fin del hijo\n");
  28.    }
  29.    else {
  30.        dup2 (link[1], STDOUT_FILENO);
  31.        close(link[0]);
  32.        close(link[1]);
  33.        execl("./d", "d", (char*)NULL);
  34.    }
  35. }


« Última modificación: 9 Junio 2017, 13:08 pm por MAFUS » En línea

ElTioBatiste

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: [?] Volcado del output al usar system en una variable
« Respuesta #2 en: 10 Junio 2017, 00:08 am »

Muchas gracias por tu respuesta! Realmente detallada y de gran ayuda! De momento, estoy tratando de corregir algunos errores que me han aparecido o de encontrar al menos el origen de estos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problbema con System.out.println(Variable);
Java
<[(x)]> 5 8,705 Último mensaje 16 Enero 2009, 16:11 pm
por <[(x)]>
[Duda C] Como añadir variable a la función system() « 1 2 »
Programación C/C++
Dryken 10 9,672 Último mensaje 3 Julio 2012, 14:28 pm
por Dryken
system(variable) en C linux
Programación C/C++
soyloqbuskas 2 2,585 Último mensaje 6 Octubre 2012, 01:24 am
por rir3760
[Bash] Asignar una variable a cada output
Scripting
vk496 2 2,909 Último mensaje 8 Septiembre 2013, 13:54 pm
por vk496
¿Cómo usar el valor de una variable dentro de system(" "); ?
Programación C/C++
Schaiden 1 2,223 Último mensaje 2 Octubre 2015, 20:46 pm
por user-marcos
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines