FILE-Pointer "stdout" neu initialisieren, ist das möglich?
-
Hallo,
ich dachte da an sowas:
// ... FILE *out=fopen("stdout_log.txt","w"); stdout=out; printf("Dieser Satz wird über stdout ausgegeben und müsste jetzt in die Datei 'stdout_log.txt' geschrieben werden.\n"); fclose(out); // ...
Das ganze funktioniert nicht (der Compiler gibt lvalue-Fehlermeldungen aus).
Dabei wäre das ja die einfachste Möglichkeit, printf-Ausgaben in eine Datei umzuleiten.
Gibt es da noch andere Möglichkeiten?
-
Ich weiß nicht, wie das im Standard vorgeschrieben ist, aber beim gcc ist stdout wie folgt definiert:
#define stdout (&_iob[STDOUT_FILENO])
_iob ist dabei:
#define _iob (*_imp___iob) /* An array of FILE */
und _imp___iob:
extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
Und du versuchst einer Adresse etwas zuzuweisen, denn nichts anderes ist stdout.
Um jetzt stdout zu verändern, müsstest du schreiben:_iob[STDOUT_FILENO] = *out;
Du solltest es aber nicht machen, da printf() und fprintf() stdout anders behandeln als ein normaler File und du deshalb keine Ausgabe im File erhältst.
-
-