 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Daniels78 Guest
|
Posted: Tue Apr 24, 2007 6:29 pm Post subject: cout(bzw. cerr) umlenken |
|
|
Hey Leute,
ich möchte gern in meinen Programm die std::cout umleiten. Ich habe
einen Deamon geschrieben, der evtl. Ausgaben auf der tty2 (unix/linux)
machen soll. dieses soll aber nicht als Schalter beim start des
deamons passieren. Gibr es eine solche Möglichkeit??
gruss daniel |
|
| Back to top |
|
 |
Stefan Reuther Guest
|
Posted: Tue Apr 24, 2007 9:28 pm Post subject: Re: cout(bzw. cerr) umlenken |
|
|
Hi there,
Daniels78 wrote:
^^^^^^^^^ Da könnte dein Name stehen.
| Quote: | ich möchte gern in meinen Programm die std::cout umleiten. Ich habe
einen Deamon geschrieben, der evtl. Ausgaben auf der tty2 (unix/linux)
machen soll. dieses soll aber nicht als Schalter beim start des
deamons passieren. Gibr es eine solche Möglichkeit??
|
Ich würde ja zuallererst versuchen, die Betriebssystem-Mittel zum
Umleiten zu benutzen ("mein_programm > /dev/tty2").
Wenn das nicht reicht, Datei aufmachen und dem std::cout deren Streambuf
unterjubeln.
int main() {
std::ofstream datei("/dev/tty2");
std::streambuf* p = std::cout.rdbuf(datei.rdbuf());
// hier dein Programm
std::cout.rdbuf(p);
}
(Das Verbiegen des Streambuf sollte vor dem Ende der Lebenszeit des
Objektes 'datei' auf jeden Fall rückgängig gemacht werden, also ggf.
fehlt hier noch ein try/catch. Ausgaben, die danach auf std::cout
landen, werden dann natürlich auch nicht mehr umgeleitet.)
Stefan |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Tue Apr 24, 2007 9:49 pm Post subject: Re: cout(bzw. cerr) umlenken |
|
|
Daniels78 <daniels78@t-online.de> writes:
| Quote: | ich möchte gern in meinen Programm die std::cout umleiten. Ich habe
einen Deamon geschrieben, der evtl. Ausgaben auf der tty2
(unix/linux) machen soll. dieses soll aber nicht als Schalter beim
start des deamons passieren.
|
Sondern?
| Quote: | Gibr es eine solche Möglichkeit??
|
Möglicherweise. Etwas in der Art von
int main()
{
std::ofstream of("somefile");
std::streambuf * const saveCoutBuf(std::cout.rdbuf(of.rdbuf()));
do_your_stuff();
std::cout.rdbuf(saveCoutBuf);
}
könnte helfen. |
|
| Back to top |
|
 |
Daniels78 Guest
|
Posted: Wed Apr 25, 2007 9:11 am Post subject: Re: cout(bzw. cerr) umlenken |
|
|
Stefan Reuther wrote:
| Quote: | Hi there,
Daniels78 wrote:
^^^^^^^^^ Da könnte dein Name stehen.
erst mal danke für deine antwort. meine name ist leider in old germany |
nur ein mal vorhanden, sodass jeder eintrag hierüber bei google zu
finden ist. hat schon mal beim praktikum probleme gemacht -sorry geht
nicht anders - brauche hier ein pseudonym
gruss daniel;-)
| Quote: |
ich möchte gern in meinen Programm die std::cout umleiten. Ich habe
einen Deamon geschrieben, der evtl. Ausgaben auf der tty2 (unix/linux)
machen soll. dieses soll aber nicht als Schalter beim start des
deamons passieren. Gibr es eine solche Möglichkeit??
Ich würde ja zuallererst versuchen, die Betriebssystem-Mittel zum
Umleiten zu benutzen ("mein_programm > /dev/tty2").
Wenn das nicht reicht, Datei aufmachen und dem std::cout deren Streambuf
unterjubeln.
int main() {
std::ofstream datei("/dev/tty2");
std::streambuf* p = std::cout.rdbuf(datei.rdbuf());
// hier dein Programm
std::cout.rdbuf(p);
}
(Das Verbiegen des Streambuf sollte vor dem Ende der Lebenszeit des
Objektes 'datei' auf jeden Fall rückgängig gemacht werden, also ggf.
fehlt hier noch ein try/catch. Ausgaben, die danach auf std::cout
landen, werden dann natürlich auch nicht mehr umgeleitet.)
Stefan |
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Thu Apr 26, 2007 7:55 pm Post subject: Re: cout(bzw. cerr) umlenken |
|
|
On Apr 24, 3:29 pm, Daniels78 <daniel...@t-online.de> wrote:
| Quote: | ich möchte gern in meinen Programm die std::cout umleiten. Ich habe
einen Deamon geschrieben, der evtl. Ausgaben auf der tty2 (unix/linux)
machen soll. dieses soll aber nicht als Schalter beim start des
deamons passieren. Gibr es eine solche Möglichkeit??
|
Thomas und Stefan haben schon gezeigt, wie man es machen kann,
aber ich möchte fragen: warum? In der ganzen Zeit, seitdem ich C
und C++ treibe (also, seit Anfang der 1980igen Jahren) habe ich
nie eine Ausgabe nach Standard-Out in Produktionscode
geschrieben. Normallerweise gehen Ausgaben immer nach einem
std::ostream&... der wohl gewöhnlicherweise mit std::cout
initialisiert wird, nicht aber zwangsläufig.
--
James Kanze (GABI Software) email:james.kanze (AT) gmail (DOT) com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|