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.






Log in to reply