redirect socket zu stderr?

T

thinking

Grünschnabel
hiho

beim starten von einem prog kann ich ja einen descriptor zu einen anderen weiterleiten

z.b.
./myprog 2>&1
also stderr nach stdout

frage:
wie kann ich selbiges innerhalb meines programmes

z.b.
int main(int argc,char **argv){
redirect(2,1);
}

ich bräuchte nämlich sowas um möglicherweise alles was an stderr geht in einen socket zu redirecten
da der socket aber erst während des programm laufes geöffnet wird, würd ich eben gerne wissen wie ich das in einem C prog unterbringen kann?

thx@ll
 
Mach dir besser eine printerr(char *) ins Programm, die deine Fehlernachricht mit write() auf der aktuellen Verbindung ausgibt. Benutzt du halt kein fprintf() sondern printerr() fuer die Fehlerausgabe.

Da FILE meines Wissens auch nur ein int ist (bin ich mir jetzt nicht 100% sicher) und der Descriptor einer Verbindung auch, sollte eigentlich eine einfache Zuweisung moeglich sein. Muesste man mal probieren. Ueblicherweise leitet man ja stderr eher in eine Logdatei um, was ja mit freopen() in einer Zeile getan ist (ok, 2 Zeilen um stderr noch zu schliessen). :)
 
hmm
ich hab da eine interessante idee:
(das muss ich erst mal ausprobiertn aber,)

Code:
int main(int argc,char **argv){
    int sever = createserver();
    int client = acceptclient(server);
    close(stderr);   // schließen von stderr, dadurch wird descriptor 2 frei
    int newstderr = dup(client);
    // da stderr aber immer noch den wert 2 hat, und dup immer die niedrigste
    // freie descriptor nummer zurückliefert, müsste das eigentlich funktionieren!
}

und ja, FILE* is lediglich ein pointer auf eine struktur die an eine int nummer geknüpft ist: have a look @ fileno();
 
Ich wuerde fclose() zum schliessen von stderr nutzen.
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

C HTTP request

Xubuntu - AVR32-linux crosscompile sqlite

fußballstatistik auswerten

Linux-App portieren / Qt-Problem

Zurück
Oben