2011-12-31 119 views
0

我正在編寫一個程序,它是另一個程序的一部分。在主程序中,他們將默認方向cout重定向到LOG文件。對於我自己的程序的調試,我需要在linux中將輸出cout重定向到控制檯(終端)。我不能像保存在例子中描述的方法控制檯rdbuf如何在Linux中將cout重定向到控制檯?

http://www.cplusplus.com/reference/iostream/ios/rdbuf/

有沒有什麼辦法讓手柄Linux在C++控制檯對我的目的是什麼?

+0

由多德的答案是正確的,但首先要確保你沒有過於複雜的事情。處理您的問題的常用方法是從調試消息中分離出實際的輸出。發送真正的輸出到'cout'和其他任何'cerr'。這樣,當程序的輸出重定向時,調試信息仍然顯示在終端上。您甚至可以將標準錯誤流和標準錯誤流重定向到不同的文件:'./yourprogram 1> output.txt 2> debug.txt' – 2011-12-31 22:28:27

回答

1

您需要定義「控制檯」的含義以及「重定向」的含義。如果你在某些情況下運行某個程序,並將其輸出重定向到其他地方,並且希望將其重定向到控制終端(當他們說'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); 
} 
+0

'console'表示'終端'和'重定向'表示我的程序是另一個將默認輸出更改爲LOG文件的程序的一部分。我想在終端上出現一些輸出,用於調試我自己的代碼。 – Rasoul 2011-12-31 21:45:30

+0

謝謝!但是當我編譯你的建議代碼時,它會抱怨沒有匹配的函數來調用'rdbuf(std :: fstream *&)' – Rasoul 2011-12-31 21:54:36

+0

最後一行應該是'cout.ios :: rdbuf(console-> rdbuf() );' – 2011-12-31 22:23:36

0

cout根據定義轉到stdout,它是文件描述符1。

+0

對不起,但我沒有得到它。你能舉一個例子代碼嗎? – Rasoul 2011-12-31 20:39:49

+0

你想要完成什麼? 'cout'已經默認進入控制檯,所以我不確定。 – 2011-12-31 21:05:52

1

我無法編譯克里斯的例子。 我知道「 - > open」沒有在「console-> open」中聲明。 我使用的KDevelop 4.5.2編譯它,哪些做法是一段代碼

ofstream console("/dev/tty"); //create stream 
cout.rdbuf(console.rdbuf()); //redirects cout to the new stream 
相關問題