चूंकि अन्य उत्तरों का उल्लेख नहीं है कि इसके बारे में क्या करना है, मैं इसे यहां प्रदान करूंगा। आपको बफर को सहेजने और पुनर्स्थापित करने की आवश्यकता है जिसे कोउट को प्रबंधित किया जाना चाहिए। उदाहरण के लिए:
#include <fstream>
#include <iostream>
// RAII method of restoring a buffer
struct buffer_restorer {
std::ios &m_s;
std::streambuf *m_buf;
buffer_restorer(std::ios &s, std::streambuf *buf) : m_s(s), m_buf(buf) {}
~buffer_restorer() { m_s.rdbuf(m_buf); }
};
int main()
{
std::ofstream log("oops.log");
buffer_restorer r(std::cout, std::cout.rdbuf(log.rdbuf()));
std::cout << "Oops!\n";
return 0;
}
अब जब cout
के बफर से पहले cout
कार्यक्रम के अंत में नष्ट हो जाता है बदल दिया जाता है, इसलिए जब cout
को नष्ट कर देता है अपने बफ़र सही बात होता है।
बस मानक कब पुनः निर्देशित के लिए आम तौर पर पर्यावरण को पहले से ही करने के लिए है कि आप के लिए की क्षमता है (उदाहरण के लिए खोल में कब पुनर्निर्देशन)। बल्कि उपरोक्त कोड से मैं शायद बस कार्यक्रम चलाने चाहते हैं के रूप में:
yourprogram > oops.log
इसके अलावा एक बात याद रखना होगा कि std::cout
अन्य वैश्विक चर के रूप सभी एक ही कमियां के साथ एक वैश्विक चर रहा है है। इसे संशोधित करने या यहां तक कि इसका उपयोग करने के बजाय आप वैश्विक चर से बचने के लिए सामान्य तकनीकों का उपयोग करना पसंद कर सकते हैं। उदाहरण के लिए आप std::ostream &log_output
पैरामीटर पास कर सकते हैं और कोड का उपयोग cout
सीधे कोड के बजाय कर सकते हैं।
आपको अपने शीर्षक पर और विस्तार करना चाहिए। – 0x499602D2