2017-01-16 8 views
0

Ich versuche, von STDOUT in C++ zu lesen, aber jedes Beispiel, das ich finde, verwendet pipe und dup und ich frage mich, ob es eine Möglichkeit gibt, sie zu vermeiden. Sagen wir einfach:Kann STDOUT vor der Umleitung gelesen werden?

cout << "Hello world" << endl; 

/* ... */ 

read(STDOUT_FILENO, buffer, MAX_LEN) 
+1

Warum möchten Sie STDOUT lesen? Es ist ein Ausgabekanal zum Schreiben. – DyZ

+0

Mögliches Duplikat von [C++: STDOUT umleiten] (http://stackoverflow.com/questions/4810516/c-redirecting-stdout) - Insbesondere [diese Antwort] (http://stackoverflow.com/a/6211644/1241334) auf diese Frage. –

+0

aber - statt 'cout' - warum streamen Sie zum Beispiel nicht zu einem' ostringstream'? – Nim

Antwort

2

Die einfache Antwort ist, dass Sie nicht von STDOUT_FILENO lesen kann. Der Anruf an read gibt immer EBADF zurück, da STDOUT_FILENO nicht gültig ist, von zu lesen. Deshalb benutzen Leute pipe und dup.


Wenn Sie sich für eine C++ Ansatz zu suchen, was ich denke, was Sie tun wollen, überprüfen Sie die Antwort darauf: How to redirect cin and cout to files? Wenn Sie mit etwas von Ihrer eigenen Schöpfung std::cout ‚s Ausgabepuffer ersetzen, können Sie manipuliere es wie du willst. Leider erfasst dies nur die Ausgabeoperationen an std::cout und nicht Dinge wie direkte Anrufe zu write(STDOUT_FILENO, ...), printf(...) und was nicht. Es ist auch viel unbequemer (in meiner Erfahrung).

Verwandte Themen