將cout或cerr重定向到文件很容易。我可以使用它將第三方輸出重定向到一個文件。但是,在將第三方輸出重定向到文件之後,我如何使用cout自己輸出到控制檯?將cout或cerr重定向到文件後使用cout或cerr輸出到控制檯
2
A
回答
4
我RAII的忠實球迷,所以我曾寫了這個小助手類。它將重定向流直到它超出範圍,此時它會恢復原始緩衝區。非常方便。 :)
class StreamRedirector {
public:
explicit StreamRedirector(std::ios& stream, std::streambuf* newBuf) :
savedBuf_(stream.rdbuf()), stream_(stream)
{
stream_.rdbuf(newBuf);
}
~StreamRedirector() {
stream_.rdbuf(savedBuf_);
}
private:
std::streambuf* savedBuf_;
std::ios& stream_;
};
可以使用這樣的:
using namespace std;
cout << "Hello stdout" << endl;
{
ofstream logFile("log.txt");
StreamRedirector redirect(cout, logFile.rdbuf());
cout << "In log file" << endl;
}
cout << "Back to stdout" << endl;
4
您保存緩衝並在以後恢復它:
std::streambuf *buf = std::cout.rdbuf(); //save
// Do other stuff
std::cout.rdbuf(buf); // restore
+0
如果第三方庫有其他線程調用cout會怎麼樣? – inetknght
+1
@inetknght:[查看此SO問題](http://stackoverflow.com/questions/6374264/is-cout-synchronized-thread-safe)瞭解有關C++ 03和C++ 11之間差異的更多信息,但基本上你必須自己管理同步,並確保多個線程不同時寫入cout。 –
相關問題
- 1. 管道cout干擾cerr
- 2. 爲什麼CERR刷新COUT
- 3. Visual Studio 2012 cout未顯示,但cerr
- 4. 多個線程寫入std :: cout或std :: cerr
- 5. 將調試輸出重定向到空流而不是std :: cerr
- 6. 將cout重定向到文件C++
- 7. 如何在Linux中將cout重定向到控制檯?
- 8. 將std :: cout重定向到新創建的控制檯
- 9. 是否有必要重置cout,cerr和clog的rdbuf,如果它們已被更改爲重定向到文件?
- 10. 什麼時候使用cerr和當cout在C++中?
- 11. C++函數cout重定向到文件
- 12. 將輸出重定向到控制檯
- 13. 嘗試將std :: cerr重定向到文件時出現訪問衝突異常
- 14. 自定義C++的cout類 - 輸出到控制檯和日誌文件
- 15. 將std :: cout重定向到QTextEdit
- 16. 將cout捕獲/重定向到函數
- 17. 將std :: cout重定向到QTextEdit
- 18. 如何將std :: cout重定向到UITextView?
- 19. 如何將控制檯輸出重定向到文本文件
- 20. cout,cin,cerr和clog中的「c」是什麼意思?
- 21. 如何在cout/cerr上打印USB字符串描述符?
- 22. 同一類型的對象cout,cerr,clog表現如何不同?
- 23. iostream對象如何實現cin,cout,cerr和clog?
- 24. Robot Framework:如何將控制檯輸出重定向到文件
- 25. 將控制檯輸出重定向到日誌文件
- 26. Xcode 5,如何將控制檯輸出重定向到文件
- 27. 將SWI-Prolog控制檯輸出重定向到一個文件
- 28. scala 2.11:如何將控制檯輸出重定向到文件
- 29. 重定向控制檯輸出到UNIX
- 30. 重定向std :: cout
什麼是 「第三者輸出」? –
通常從代碼中的另一個團隊調試喋喋不休的人寫道。我想我可以戳他們給我一個接口,讓他們輸出到別的地方。但我想知道是否有另一種方法可以解決這個問題,以防我進入一種我無法影響被調用代碼的情況。 – inetknght