2017-01-16 56 views
0

我想從C++的STDOUT中讀取,但是我發現每個示例都暗示使用了pipedup,我想知道是否有辦法避免它們。讓我們說:在重定向之前是否可以讀取STDOUT?

cout << "Hello world" << endl; 

/* ... */ 

read(STDOUT_FILENO, buffer, MAX_LEN) 
+1

爲什麼要閱讀STDOUT?這是一個用於寫入的輸出通道。 – DyZ

+0

[C++:重定向標準輸出]的可能重複(http://stackoverflow.com/questions/4810516/c-redire- stdout) - 特別是[這個答案](http://stackoverflow.com/a/6211644/1241334)這個問題。 –

+0

但是 - 而不是'cout' - 爲什麼不流到'ostringstream'例如? – Nim

回答

2

簡單的答案是你不能從STDOUT_FILENO讀取。對read的呼叫將始終返回EBADF,因爲STDOUT_FILENO無法讀取。這就是爲什麼人們使用pipedup


如果你正在尋找一個以上的C++方法來要我現在想什麼,檢查出的答案:How to redirect cin and cout to files?如果你與你自己創造的東西代替std::cout的輸出緩衝器,可以不管你想要怎麼操作它。不幸的是,這隻會將輸出操作捕獲到std::cout而不是直接調用write(STDOUT_FILENO, ...),printf(...)等等。這也是更不方便的(以我的經驗)。

相關問題