2012-01-04 44 views
5

Tôi có 2 chương trình C. nói một là program-1.cNhận đầu ra của một chương trình C thành một biến trong một chương trình C khác

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

Bây giờ trong mã 2 tên program-2.c, tôi muốn đầu ra của mã 1 vào một biến, để tôi có thể có đầu ra "hello world" vào một biến trong mã C 2 .

Làm thế nào tôi có thể làm điều này?

+1

bạn có thực sự có nghĩa là để truyền dữ liệu giữa hai thực thi riêng biệt (chương trình 1.EXE và chương trình 2.exe) hoặc hai lớp hoặc các chức năng trong các tập tin mã riêng biệt, đó là những gì bạn đã hiển thị cho đến nay? – ChrisBD

+0

windows/linux hoặc ...? – Matt

+0

tôi cần cả hai - Windows n linux ... các giải pháp riêng biệt. bạn có thể giúp chứ ? – Ronin

Trả lời

10

Bạn có thể sử dụng popen chức năng cho việc này:

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

cảm ơn u tất cả ... nhưng tôi đang tìm giải pháp này trong WINDOWS ... Bạn có thể giúp plz ?? – Ronin

+0

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

2

Bạn sẽ cần chạy hai chương trình trong hai quy trình riêng biệt và sau đó sử dụng một số loại cơ chế IPC để trao đổi dữ liệu giữa hai quy trình.

+0

+1 vì IPC hầu như luôn là giải pháp tốt hơn và có khả năng mở rộng, trừ khi hai chương trình hoàn toàn là cho việc xử lý văn bản. – stijn

2

Trên nhiều hệ điều hành, bạn có thể nhận được đầu ra từ một chương trình điều khiển làm đầu vào cho tới, có lẽ

program-1 > program-2 

bạn có thể sau đó đọc kết quả từ đầu vào tiêu chuẩn

std::string variable; 

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

Nhưng điều đó sẽ không hạn chế đầu vào chỉ từ chương trình-1? Tôi nghĩ nếu một người chỉ đơn giản là quan tâm để lấy sản lượng từ một chương trình đang chạy và vẫn có thể chuyển đổi xung quanh đầu vào tiêu chuẩn, phương pháp này có thể không lý tưởng. –

+0

Phải. Chúng tôi không có bất kỳ thông tin về cách các chương trình được chạy, vì vậy đây chỉ là một giải pháp có thể (giả sử các chương trình điều khiển trên Windows/Linux). –

1

Mã mẫu cho "Out đặt của một chương trình là đầu vào của một chương trình khác dùng ống"

#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

cảm ơn tất cả ...nhưng tôi đang tìm giải pháp này trong WINDOWS ... Bạn có thể giúp plz ?? – Ronin

0

Trên cửa sổ u có thể sử dụng ví dụ này ...

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

Bạn phải quan sát và đặt giá trị usleep() để nhận thành công đầu vào từ đầu ra của chương trình khác. Chạy cả hai chương trình cùng một lúc. Thưởng thức .. :)

0

Trong mã cho chương trình 2.c bạn nên sử dụng int argcchar *argv[] để có được đầu ra từ chương trình 1.c

Vì vậy, chương trình 2.c sẽ trông như thế này:

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

} 

Sau đó, trong cửa sổ lệnh program-1 > program-2

Các vấn đề liên quan