2012-01-04 10 views
5

Mam 2 programy C. Say jeden jest program-1.cUzyskaj wyjście jednego programu C do zmiennej w innym programie C

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

Teraz w 2. kryptonimie program-2.c, chcę wyjście 1 kodeksu w zmiennej tak, że mogę mieć wyjście „Hello World” do zmiennej w 2. kodu C .

Jak mogę to zrobić?

+1

Czy rzeczywiście znaczy do przekazywania danych pomiędzy dwoma oddzielnymi wykonywalnych (program-1.exe i program-2.exe) lub dwie klasy lub funkcji w oddzielnych plikach kodowych co dotychczas pokazałeś? – ChrisBD

+0

Windows/Linux lub ...? – Matt

+0

Potrzebuję obu - Windows n linux ... oddzielne rozwiązania. możesz pomóc ? – Ronin

Odpowiedz

10

Można użyć funkcji popen dla tego:

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

dziękuję wszystkim ... ale szukam tego rozwiązania w WINDOWS ... Czy uplz pomóc? – Ronin

+0

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

2

Będziesz musiał uruchomić dwa programy w dwóch oddzielnych procesach, a następnie użyć jakiegoś mechanizmu IPC do wymiany danych między tymi dwoma procesami.

+0

+1, ponieważ IPC jest prawie zawsze lepszym i skalowalnym rozwiązaniem, chyba że dwa programy są przeznaczone wyłącznie do przetwarzania tekstu. – stijn

2

W wielu systemach operacyjnych można uzyskać wyjście z jednego programu konsoli jako wejście do następnego, może

program-1 > program-2 

można następnie odczytać wynik ze standardowego wejścia

std::string variable; 

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

Ale czy to nie ograniczy wejścia z programu-1? Myślę, że gdyby ktoś chciał po prostu pobrać dane z jednego działającego programu i nadal mógł przełączać standardowe wejście, ta metoda może nie być idealna. –

+0

Dobrze. Nie mamy żadnych informacji o tym, w jaki sposób programy mają być uruchamiane, więc jest to tylko jedno możliwe rozwiązanie (zakładając programy konsoli w systemie Windows/Linux). –

1

Przykładowy kod dla "Out" put jednego programu jest wejście z innego programu Wykorzystanie rur”

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

Cheers ....

+0

dziękuję wszystkim ...ale szukam tego rozwiązania w WINDOWS ... Czy możesz pomóc? – Ronin

0

na Windows można korzystać z tego przykładu ...

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

Trzeba obserwować i ustaw wartość usleep(), aby pomyślnie uzyskać dane wejściowe z wyjścia innego programu. Uruchom oba programy jednocześnie. Ciesz .. :)

0

W kodzie programu-2.C należy użyć int argc i char *argv[] dostać wyjście z programu-1c

Więc program-2.c powinien wyglądać następująco:

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

} 

Następnie w wierszu polecenia program-1 > program-2

Powiązane problemy