我正在編寫一個程序,它是另一個程序的一部分。在主程序中,他們將默認方向cout重定向到LOG文件。對於我自己的程序的調試,我需要在linux中將輸出cout重定向到控制檯(終端)。我不能像保存在例子中描述的方法控制檯rdbuf
:如何在Linux中將cout重定向到控制檯?
http://www.cplusplus.com/reference/iostream/ios/rdbuf/
有沒有什麼辦法讓手柄Linux在C++控制檯對我的目的是什麼?
我正在編寫一個程序,它是另一個程序的一部分。在主程序中,他們將默認方向cout重定向到LOG文件。對於我自己的程序的調試,我需要在linux中將輸出cout重定向到控制檯(終端)。我不能像保存在例子中描述的方法控制檯rdbuf
:如何在Linux中將cout重定向到控制檯?
http://www.cplusplus.com/reference/iostream/ios/rdbuf/
有沒有什麼辦法讓手柄Linux在C++控制檯對我的目的是什麼?
您需要定義「控制檯」的含義以及「重定向」的含義。如果你在某些情況下運行某個程序,並將其輸出重定向到其他地方,並且希望將其重定向到控制終端(當他們說'console'時,許多人意味着什麼),則可以重定向到/ dev/tty,例如:
program >/dev/tty
當您運行該程序。以上可能是shell腳本中的一行,或者是作爲參數傳遞給system(3)的字符串 - 這取決於您如何啓動程序。
如果想要更改輸出的程序中去,你可以打開一個新的流緩衝指你想要什麼,用的ios :: rdbuf重定向到它:
filebuf *console = new filebuf();
console->open("/dev/tty");
if (!console->is_open()) {
cerr << "Can't open console" << endl;
} else {
cout.ios::rdbuf(console);
}
cout
根據定義轉到stdout
,它是文件描述符1。
對不起,但我沒有得到它。你能舉一個例子代碼嗎? – Rasoul 2011-12-31 20:39:49
你想要完成什麼? 'cout'已經默認進入控制檯,所以我不確定。 – 2011-12-31 21:05:52
我無法編譯克里斯的例子。 我知道「 - > open」沒有在「console-> open」中聲明。 我使用的KDevelop 4.5.2編譯它,哪些做法是一段代碼
ofstream console("/dev/tty"); //create stream
cout.rdbuf(console.rdbuf()); //redirects cout to the new stream
由多德的答案是正確的,但首先要確保你沒有過於複雜的事情。處理您的問題的常用方法是從調試消息中分離出實際的輸出。發送真正的輸出到'cout'和其他任何'cerr'。這樣,當程序的輸出重定向時,調試信息仍然顯示在終端上。您甚至可以將標準錯誤流和標準錯誤流重定向到不同的文件:'./yourprogram 1> output.txt 2> debug.txt' – 2011-12-31 22:28:27