Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » [C] Mit freopen () Standard-Streams umleiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.09.2007, 20:15 Uhr
cfx



Hallo,
ich weiß, dass ich z. B. mit freopen ("Datei(-pfad)", "w", stdout) die Standardausgabe auf eine Datei umleiten kann.

Meine Frage ist, wie kann ich stdout wieder "zurücksetzen" ?
Sprich, dass er wieder alles in die Konsole schreibt.

Folgendes funktioniert nicht: freopen("CON", "w", stdout);

...und wie sieht das dann bei stdin und stderr aus ?

Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.10.2007, 13:52 Uhr
virtual
Sexiest Bit alive
(Operator)


Du musst erst stdout mittels fdopen duplizieren, dann auf das orginal freopen machen. Nachher kannst du dann mit der Kopie stdout wieder in den original zustand zurück versetzen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.10.2007, 22:06 Uhr
cfx



Meines Wissens liefert fdopen () doch aber nur den Stream zu einem Dateideskriptor, so wie fileno () den Deskriptor zum Stream liefert.

Nebenbei, freopen ("/dev/tty", "w", stdout) scheint unter Linux zu funktionieren.
Ich habe auch etwas mit dup () und dup2 () herumexperimentiert, bloß sind diese beiden Funktionen doch auch nicht portabel, oder ?

Nun ja, es geht zumindest beides.

[EDIT] Vielleicht macht sich ein Code-Beispiel manchmal doch nicht so schlecht...

C++:
#include <stdio.h>
#include <unistd.h>

int
main ()
{
    int fd;
    fpos_t pos;

    puts ("Es wird Text in die ...");

    fflush (stdout);
    fgetpos (stdout, &pos);
    fd = dup (fileno (stdout));
    freopen ("log.txt", "w", stdout);

    printf ("Log: Das ist ein Test\n");

    fflush (stdout);
    dup2 (fd, fileno (stdout));
    close (fd);
    clearerr (stdout);
    fsetpos (stdout, &pos);

    puts ("... Logdatei geschrieben.");

    return 0;
}

Dieser Post wurde am 02.10.2007 um 22:14 Uhr von cfx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.10.2007, 22:08 Uhr
Blubber2063



Nein portabel sind sie meines wissens nicht, aber die dup funktionen vorallem dup2 sind hier dein bester Freund.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.10.2007, 22:13 Uhr
cfx



Es gibt doch aber sicher ähnliche Funktionen unter Windows ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: