Normalerweise stdoutist zeilengepuffert. Mit anderen Worten, solange Ihr printfArgument mit einer neuen Zeile endet, können Sie erwarten, dass die Zeile sofort gedruckt wird. Dies scheint nicht zu gelten, wenn Sie eine Pipe zum Umleiten verwenden tee.
Ich habe ein C ++ - Programm, adas Zeichenfolgen ausgibt, die immer abgeschlossen \nsind stdout.
Wenn es von selbst ausgeführt wird ( ./a), wird alles wie erwartet korrekt und zur richtigen Zeit gedruckt. Wenn ich es jedoch an tee( ./a | tee output.txt) weitergebe, wird nichts gedruckt, bis es beendet wird, was den Verwendungszweck zunichte macht tee.
Ich weiß, dass ich das Problem beheben kann, indem ich fflush(stdout)nach jedem Druckvorgang im C ++ - Programm ein hinzufüge . Aber gibt es einen saubereren und einfacheren Weg? Gibt es einen Befehl, den ich zum Beispiel ausführen kann, der die Zeilenpufferung erzwingen würde stdout, selbst wenn eine Pipe verwendet wird?
expectmich selbst kompilieren musste, daunbufferes in OS X nicht standardmäßig enthalten zu sein scheint.