C में, हम रीडायरेक्शन उद्देश्यों के लिए freopen() फंक्शन का उपयोग कर सकते हैं। इस फंक्शन का उपयोग करके, हम मौजूदा FILE पॉइंटर को दूसरे स्ट्रीम पर रीडायरेक्ट कर सकते हैं। freopen का सिंटैक्स नीचे जैसा है:
FILE *freopen(const char* filename, const char* mode, FILE *stream)
C++ में भी, हम रीडायरेक्शन कर सकते हैं। C++ में, स्ट्रीम्स का उपयोग किया जाता है। यहां हम अपने स्वयं के स्ट्रीम का उपयोग कर सकते हैं, और सिस्टम स्ट्रीम को भी रीडायरेक्ट कर सकते हैं। C++ में तीन प्रकार के स्ट्रीम हैं।
- istream: केवल इनपुट सपोर्ट करने वाला स्ट्रीम
- ostream: केवल आउटपुट सपोर्ट करने वाला स्ट्रीम
- iostream: इनका उपयोग इनपुट और आउटपुट दोनों के लिए किया जा सकता है।
ये क्लासेस, और फाइल स्ट्रीम क्लासेस ios और streambuf क्लास से डेराइव्ड हैं। इसलिए फाइलस्ट्रीम और IO स्ट्रीम ऑब्जेक्ट्स समान रूप से व्यवहार करते हैं। C++ किसी भी स्ट्रीम के लिए स्ट्रीम बफर सेट करने की अनुमति देता है। इसलिए हम स्ट्रीम से जुड़े स्ट्रीम बफर को बदलकर केवल रीडायरेक्ट कर सकते हैं। उदाहरण के लिए, यदि दो स्ट्रीम A और B हैं, और हम स्ट्रीम A को स्ट्रीम B पर रीडायरेक्ट करना चाहते हैं, तो हमें इन चरणों का पालन करना होगा:
- स्ट्रीम A का स्ट्रीम बफर प्राप्त करें, और इसे स्टोर करें
- स्ट्रीम A के स्ट्रीम बफर को स्ट्रीम बफर B पर सेट करें
- स्ट्रीम A के स्ट्रीम बफर को उसकी पिछली स्थिति पर रीसेट करें (वैकल्पिक)
उदाहरण कोड
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
fstream fs;
fs.open("abcd.txt", ios::out);
string lin;
// स्ट्रीम बफर का बैकअप बनाएं
streambuf* sb_cout = cout.rdbuf();
streambuf* sb_cin = cin.rdbuf();
// फाइल स्ट्रीम बफर प्राप्त करें
streambuf* sb_file = fs.rdbuf();
// अब cout फाइल की ओर इशारा करेगा
cout.rdbuf(sb_file);
cout << "This string will be stored into the File" << endl;
// बैकअप से पिछला बफर प्राप्त करें
cout.rdbuf(sb_cout);
cout << "Again in Cout buffer for console" << endl;
fs.close();
return 0;
}
आउटपुट
Again in Cout buffer for console
abcd.txt
This string will be stored into the File