 |
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 |
|
 |
Powered by phpBB © 2001, 2006 phpBB Group
|