2012-01-04 5 views
5

J'ai 2 programmes C. dire qu'on est program-1.cRécupère la sortie d'un programme C dans une variable d'un autre programme C

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

maintenant en 2ème nom de code program-2.c, je veux la sortie du 1er code dans une variable, afin que je puisse avoir la sortie « Bonjour tout le monde » dans une variable dans le 2ème code C .

Comment est-ce que je peux faire ceci?

+1

Voulez-vous dire en fait pour transmettre des données entre deux exécutables distincts (programme-1.exe et programme 2.exe) ou deux classes ou fonctions dans les fichiers de code distincts, c'est ce que vous avez montré jusqu'ici? – ChrisBD

+0

windows/linux ou ...? – Matt

+0

J'ai besoin des deux - Windows n linux ... solutions séparées. Peux-tu aider ? – Ronin

Répondre

10

Vous pouvez utiliser la fonction popen pour cela:

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

merci à tous ... mais je suis à la recherche de cette solution dans WINDOWS ... Pouvez-vous aider? – Ronin

+0

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

2

Vous devrez exécuter les deux programmes dans deux processus distincts, puis utiliser une sorte de mécanisme IPC pour échanger des données entre les deux processus.

+0

+1 comme IPC est presque toujours la meilleure solution et évolutive, à moins que les deux programmes sont purement pour le traitement du texte. – stijn

2

Sur de nombreux systèmes d'exploitation, vous pouvez obtenir la sortie d'un programme de la console en entrée à l'autre, peut-être

program-1 > program-2 

vous pouvez alors lire le résultat de l'entrée standard

std::string variable; 

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

Mais cela ne limitera-t-il pas les entrées du programme-1? Je pense que si l'on voulait simplement extraire la sortie d'un programme en cours et être encore capable de changer d'entrée standard, cette méthode peut ne pas être idéale. –

+0

Droite. Nous n'avons aucune information sur la façon dont les programmes doivent être exécutés, donc c'est juste une solution possible (en supposant des programmes de console sur Windows/Linux). –

1

Exemple de code pour "Out" mettre d'un programme est entrée d'un autre programme utilisant Pipes »

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

Des cris de joie ....

+0

merci à tous ...mais je suis à la recherche de cette solution dans WINDOWS ... Pouvez-vous aider? – Ronin

0

Sur les fenêtres u peut utiliser cet exemple ...

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

Vous devez observer et Définissez la valeur usleep() pour obtenir l'entrée de la sortie de l'autre programme. Exécutez les deux programmes simultanément. Profitez .. :)

0

Dans le code du programme 2.c vous devez utiliser int argc et char *argv[] pour obtenir la sortie du programme 1.c

Alors programme 2.c devrait ressembler à ceci:

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] 
    }  

} 

Puis, dans l'invite de commande program-1 > program-2

Questions connexes