überprüfen unter dem Code-Snippet, das Zeichen mit \r
:Wie stdout umleiten mit ' r' auf der gleichen Zeile gedruckt?
#include <stdio.h>
#include <unistd.h>
int main() {
for(int i=1; i<=100; i++) {
printf("%d%%\r", i);
fflush(stdout);
usleep(1e4);
}
printf("\n");
return 0;
}
Der Ausgang dieses Programm auf der Konsole hat nur 1 Zeile:
$ ./main
100%
Wenn jedoch die Ausgabe in eine Datei umgeleitet wird ./main > main.log
, hat die Datei 100 Zeilen:
1%
2%
3%
...
100%
Frage:
Wie behalte ich nur die letzte Zeile der Ausgabe in der Protokolldatei?
Nicht in 'stdout' schreiben. Öffnen Sie '"/dev/tty "' als Datei und schreiben Sie darauf. Es wird nicht umgeleitet. –
Wenn Sie die Datei mit 'cat' drucken, sollte es auf die gleiche Weise angezeigt werden, aber natürlich sind die zusätzlichen Daten noch da, es wird nur auf dem Terminal überschrieben. Sie können Daten, die Sie in stdout geschrieben haben, nicht abschreiben. Beachten Sie, dass "\ r" die vorherige Zeile nicht löscht, sodass Teile davon angezeigt werden, wenn die neue Zeile kürzer ist. – interjay
Wenn Sie 'cat main.log', sicher, es wird 100 Zeilen enthalten, aber es wird nur die' 100% 'angezeigt, genau wie Ihr Terminal. –