Wie Sie sich machen Ausgabe ohne Pufferung von stdout und stderr
Ich habe ein problem mit der Protokollierung zur Ausgabe von einem automatisierten build.
Das bauen erfolgt mit einem Makefile und makefile-Dienstprogramm.
Das problem ist, dass normale Ausgabe wie compiler-Befehl Zeilen auf stdout aus und kompilieren Sie Fehler gehen an stderr.
Möchte ich, um die Ausgabe des builds, da es zeigen würde, auf dem Bildschirm. So etwas wie:
(stdout) CC -c file.cpp
(stderr) Compile error at file.cpp line 232, blah blah blah
(stdout) CC -c file2.cpp
Was ich versucht habe (von einem ksh-Skript) ist:
machen -k > bauen.log 2> bauen.melden Sie
Diese Ergebnisse in eine einzige log-Datei, aber das problem ist, dass die streams sind gepuffert und so das Ergebnis in der log-Datei ist alles Durcheinander.
Konnte ich erfassen Sie die Ausgabe in 2 separaten log-Dateien, aber dann hätte ich keine info, wie kleben Sie wieder zusammen in eine einzige log-Datei.
Gibt es eine Möglichkeit zum deaktivieren der Pufferung für stdout und stderr in diesem Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte diese Arbeit besser für Sie, denn es ist nicht umleiten von stderr und stdout getrennt, aber die Umleitung von stderr zu stdout, sollte die Pufferung zu synchronisieren.
Wenn Sie möchten, melden Sie es in eine Datei als auch als print es auf der Konsole:
Versuchen, diese
Kleben Sie wieder zusammen zu bekommen ist schwierig, aber es gibt eine richtige Antwort für das auch, und es funktioniert! Siehe "Wie kann ich sparen oder umleiten von stdout und stderr in verschiedene Dateien?" von Vivek Gite.
setbuf(stdout,NULL); ->schaltet die Pufferung von stdout