Umleiten von stdout und stderr in die gleiche Datei und wiederherstellen
Bin ich umleiten der Ausgabe von stderr und stdout von meinem c-Programm um zwei Dateien, und dann die Wiederherstellung des ursprünglichen stdout und stderr:
int sout = dup(fileno(stdout));
freopen("test.txt","w",stdout);
int serr = dup(fileno(stderr));
freopen("test.txt","a",stderr);
//some output....
dup2(sout,fileno(stdout));
close(sout);
dup2(serr,fileno(stderr));
close(serr);
Dass der code axample. Dieser funktioniert.
Aber ich möchte umleiten von stdout und stderr in die gleiche Datei(und später wiederherstellen es wieder), so dass die Ausgabe sortiert wird in der Reihenfolge sortiert auf der Konsole ausgegeben, wenn nicht, umleiten von stderr und stdout. Wie kann ich das tun?
InformationsquelleAutor der Frage unlimited101 | 2013-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt öffnen der Datei wieder für
stderr
:umleiten
stdout
an den Datei-Deskriptor Ebene durch tun:Beachten Sie, dass
stdout
undstderr
weiterhin unabhängige user-level-Puffer und, wenn nicht, richten sich an ein interaktives terminal, Spülung Regeln sind anders. Diese werden höchstwahrscheinlich die Hauptursache für die unterschiedliche Ausgabe bestellen, wenn umgeleitet. Sehen diese Erklärung der Spülung Modi und die man-Seite fürsetvbuf()
.InformationsquelleAutor der Antwort jop