2012-01-04 1 views
5

में एक चर में आउटपुट प्राप्त करें मेरे पास 2 सी प्रोग्राम हैं। कहो एक program-2.c नामित 2 कोड में program-1.cएक सी प्रोग्राम का एक अन्य सी प्रोग्राम

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

है अब, मैं एक चर में 1 कोड के उत्पादन में चाहते हैं, तो मैं 2 सी कोड में उत्पादन "हैलो दुनिया" एक चर में हो सकता है ।

मैं यह कैसे कर सकता हूं?

+1

आप वास्तव में अलग कोड फाइलों में दो अलग-अलग निष्पादनयोग्य (कार्यक्रम-1.EXE और कार्यक्रम 2.exe) या दो वर्गों या कार्यों के बीच डेटा पास करने के मतलब है, जो आपने अभी तक दिखाया है? – ChrisBD

+0

विंडोज/लिनक्स या ...? – Matt

+0

मुझे दोनों की आवश्यकता है - विंडोज एन लिनक्स ... अलग समाधान। क्या आप मदद कर सकते हैं ? – Ronin

उत्तर

10

आप इस के लिए popen फ़ंक्शन का उपयोग कर सकते हैं: कई ऑपरेटिंग सिस्टम पर

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

आप सभी को धन्यवाद ... लेकिन मैं विन्डोज़ में इस समाधान की तलाश में हूं ... क्या आप मदद कर सकते हैं ?? – Ronin

+0

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

2

आपको दो कार्यक्रमों को दो अलग-अलग प्रक्रियाओं में चलाने की आवश्यकता होगी और फिर दो प्रक्रियाओं के बीच डेटा का आदान-प्रदान करने के लिए कुछ प्रकार के आईपीसी तंत्र का उपयोग करना होगा।

+0

+1 आईपीसी लगभग हमेशा बेहतर और स्केलेबल समाधान है, जब तक कि दो प्रोग्राम पूरी तरह से पाठ को प्रोसेस करने के लिए नहीं होते हैं। – stijn

2

आप इनपुट के रूप में अगले करने के लिए,

program-1 > program-2 

एक सांत्वना कार्यक्रम से उत्पादन प्राप्त कर सकते हैं शायद आप तो कर सकते हैं मानक इनपुट

std::string variable; 

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

लेकिन क्या यह केवल प्रोग्राम -1 से इनपुट प्रतिबंधित नहीं करेगा? मुझे लगता है कि अगर कोई एक रनिंग प्रोग्राम से आउटपुट लाने में दिलचस्पी लेता है और फिर भी मानक इनपुट के आसपास स्विच करने में सक्षम होता है, तो यह विधि आदर्श नहीं हो सकती है। –

+0

दाएं। हमारे पास प्रोग्रामों को चलाने के तरीके के बारे में कोई जानकारी नहीं है, इसलिए यह केवल एक संभावित समाधान है (विंडोज/लिनक्स पर कंसोल प्रोग्राम मानते हैं)। –

1

"आउट आउट" के लिए नमूना कोड एक कार्यक्रम के पुट अन्य प्रोग्राम पाइपों का उपयोग करना "

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

चीयर्स ....

+0

आप सभी को धन्यवाद ...लेकिन मैं विन्डोज़ में इस समाधान की तलाश में हूं ... क्या आप मदद कर सकते हैं ?? – Ronin

0

खिड़कियों यू इस उदाहरण का उपयोग कर सकते पर के इनपुट है ...

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

आप निरीक्षण करने के लिए है और अन्य कार्यक्रम के आउटपुट से सफलतापूर्वक इनपुट प्राप्त करने के लिए usleep() मान सेट करें। दोनों कार्यक्रमों को एक साथ चलाएं। का आनंद लें .. :)

0

कार्यक्रम-2.c के लिए कोड में आप int argc और char *argv[] का उपयोग करना चाहिए

तो कार्यक्रम-2.c इस तरह दिखना चाहिए कार्यक्रम-1.c से उत्पादन प्राप्त करने के लिए:

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

} 

फिर कमांड प्रॉम्प्ट में program-1 > program-2