मेरे अधिकांश जीवन के लिए, मैं cstdio
का उपयोग कर रहा हूं। अब मैं iostream
पर स्थानांतरित करने की कोशिश कर रहा हूं।रन .exe और stdin को रीडायरेक्ट करें और
मान लीजिए मैं "foo.cpp" नामक एक अलग कार्यक्रम है कि इस तरह दिखता है:
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
"bar.cpp" कहा जाता है एक अन्य कार्यक्रम में, मैं foo निष्पादन कहते हैं। अतीत में, अगर मैं एक फाइल करने के लिए stdin और stdout अनुप्रेषित करना चाहता था, मैं freopen
तो तरह का प्रयोग करेंगे:
int main(){ // bar.cpp, redirecting stdin and stdout
freopen("foo.in", "r", stdin); // Suppose "foo.in" contains a single integer "42"
freopen("foo.out", "w", stdout);
system("foo.exe"); // "foo.out" will contain "47"
}
अब मैं std::cin
और std::cout
stringstreams पर रीडायरेक्ट करने की कोशिश कर रहा हूँ। कुछ इस तरह:
int main(){ // bar.cpp, redirecting cin and cout
std::istringstream instr("62");
std::ostringstream outstr;
std::cin.rdbuf(instr.rdbuf());
std::cout.rdbuf(outstr.rdbuf());
system("foo.exe"); // outstr should contain "67"
}
लेकिन क्या मैंने सीखा है कि std::cin
और std::cout
जब "foo.exe" को क्रियान्वित करने पुन: निर्देशित नहीं किया गया है। कार्यक्रम अब उपयोगकर्ता इनपुट की उम्मीद है और std::cout
पर प्रिंट करेगा। जब "foo.exe" निष्पादित किया गया था, std::cin
और std::cout
"bar.cpp" के भीतर क्रमशः instr
और outstr
पर रीडायरेक्ट किया गया।
मेरा सवाल है, क्या iostream
के साथ ऐसा करने का कोई तरीका है जैसा कि मैंने इरादा किया है, या मैं freopen
का उपयोग कर अटक गया हूं?
ऑपरेटिंग सिस्टम निष्पादन योग्य के आउटपुट को संसाधित करने का प्रभारी है। सी ++ भाषा में आउटपुट रीडायरेक्ट करने के लिए कोई सुविधा नहीं है। –
प्रोग्राम्स के बीच डेटा साझा करने के लिए सामान्य समाधान: फ़ाइलें, सॉकेट, पाइपिंग (अपने प्रोग्राम के लिए मानक इनपुट में अन्य प्रोग्राम के पाइप आउटपुट के लिए ओएस को बताएं), साझा स्मृति क्षेत्र। इंटरनेट खोजें। –
क्या आपने वही फ्रीपैन कॉल करने की कोशिश की है? – stark