2012-01-04 20 views
5

Tengo 2 programas C. decir que uno es program-1.cObtenga la salida de un programa C en una variable en otro programa C

int main(){ 
printf("hello world"); 
} 

Ahora en segundo nombre código program-2.c, quiero que la salida del primero de código en una variable, para que pueda tener la salida "hola mundo" en una variable en el código 2ª C .

¿Cómo puedo hacer esto?

+1

es lo que realmente significa para pasar datos entre dos ejecutables independientes (programa de 1.exe y el programa-2.exe) o dos clases o funciones en los archivos de código separadas, que es lo que has mostrado hasta ahora? – ChrisBD

+0

windows/linux or ...? – Matt

+0

necesito ambos - Windows n Linux ... soluciones separadas. Puedes ayudar ? – Ronin

Respuesta

10

Usted puede utilizar la función popen para esto:

FILE* proc1 = popen("./program1", "r"); 
// Usual error handling code goes here 
// use the usual FILE* read functions 
pclose(proc1); 
+0

gracias a todos ... pero estoy buscando esta solución en WINDOWS ... ¿Puedes ayudar? – Ronin

+0

http://stackoverflow.com/questions/450865/what-is-the-equivalent-to-posix-popen-in-the-win32-api – Mat

2

Tendrá que ejecutar los dos programas en dos procesos separados y luego usar algún tipo de mecanismo de IPC para intercambiar datos entre los dos procesos.

+0

+1 como IPC es casi siempre la solución mejor y escalable, a menos que los dos programas sean puramente para procesar texto. – stijn

2

En muchos sistemas operativos puede obtener la salida de un programa de consola como entrada a la siguiente, tal vez

program-1 > program-2 

a continuación, puede lea el resultado de la entrada estándar

std::string variable; 

std::getline(std::cin, variable); 
+0

¿Pero eso no restringirá la entrada del programa-1 solamente? Creo que si a uno le interesara simplemente obtener la salida de un programa en ejecución y todavía pudiera cambiar la entrada estándar, este método puede no ser el ideal. –

+0

Derecha. No tenemos información sobre cómo se ejecutarán los programas, por lo que esta es solo una posible solución (suponiendo que los programas de la consola en Windows/Linux). –

1

Código de muestra de "Out put de un programa es entrada de otro programa de uso de Tubos"

#include <unistd.h> 
#include <process.h> 

/* Pipe the output of program to the input of another. */ 

int main() 
{ 
    int pipe_fds[2]; 
    int stdin_save, stdout_save; 

    if (pipe(pipe_fds) < 0) 
    return -1; 

    /* Duplicate stdin and stdout so we can restore them later. */ 
    stdin_save = dup(STDIN_FILENO); 
    stdout_save = dup(STDOUT_FILENO); 

    /* Make the write end of the pipe stdout. */ 
    dup2(pipe_fds[1], STDOUT_FILENO); 

    /* Run the program. Its output will be written to the pipe. */ 
    spawnl(P_WAIT, "/dev/env/DJDIR/bin/ls.exe", "ls.exe", NULL); 

    /* Close the write end of the pipe. */ 
    close(pipe_fds[1]); 

    /* Restore stdout. */ 
    dup2(stdout_save, STDOUT_FILENO); 

    /* Make the read end of the pipe stdin. */ 
    dup2(pipe_fds[0], STDIN_FILENO); 

    /* Run another program. Its input will come from the output of the 
    first program. */ 
    spawnl(P_WAIT, "/dev/env/DJDIR/bin/less.exe", "less.exe", "-E", NULL); 

    /* Close the read end of the pipe. */ 
    close(pipe_fds[0]); 

    /* Restore stdin. */ 
    dup2(stdin_save, STDIN_FILENO); 

    return 0; 
} 

Saludos ....

+0

gracias a todos ...pero estoy buscando esta solución en WINDOWS ... ¿Puedes ayudar? – Ronin

0

En las ventanas u puede utilizar este ejemplo ...

#include <iostream> 
#include<time.h> 
  
using namespace std; 
  
int main() 
{ 
    int a=34, b=40; 
  
    while(1) 
    { 
     usleep(300000);  
     cout << a << " " << b << endl; 
    } 
} 



#include<iostream> 
  
using namespace std; 
  
int main() 
{ 
    int a, b; 
  
    while(1) 
    { 
    cin.clear(); 
  
     cin >> a >> b; 
  
     if (!cin) continue; 
  
     cout << a << " " << b << endl; 
    } 
} 

Hay que observar y establezca el valor de usleep() para obtener con éxito la entrada de la salida del otro programa. Ejecuta ambos programas simultáneamente. Disfrutar .. :)

0

En el código para el programa-2.c se debe utilizar int argc y char *argv[] para obtener la salida del programa de 1.c

Así programa 2.c debe tener este aspecto:

void main(int argc, char *argv[]) 
{ 
    int i; 

    for(i=0; i<argc; i++) 
    { 
     printf("%s", argv[i]); //Do whatever you want with argv[i] 
    }  

} 

Luego, en el símbolo del sistema program-1 > program-2