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