Ich habe versucht, einen Code in C ++ zu schreiben, der so etwas wie tail -f
in Linux macht. Ich habe diese Frage gefunden:
Wie liest man eine wachsende Textdatei in C ++? und implementiert das gleiche. Ich habe ein temp.txt
erstellt und echo "temp" >> temp.txt
gestartet. Aber mein Programm druckt die an der Datei vorgenommenen Aktualisierungen nicht. Was mache ich falsch? Dies ist der Code, den ich verwende
AKTUALISIEREN
Ich habe den gleichen Code auf einem Linux-Rechner ausprobiert und es funktionierte gut, aber es funktioniert nicht auf Mac. Ich habe gcc
verwendet, um den Code zu kompilieren.
gcc -v
gibt
UPDATE 2
Ich habe weiter untersucht und festgestellt, dass ich gcc nicht benutze. Ich habe gcc separat installiert und es funktioniert jetzt gut. Ist das ein Fehler in clang
?
Es ist durchaus möglich, dass cout
buffer in Ihren Tests nicht gelöscht wurde, da die Puffergröße nicht das Überlauflimit erreicht hat.
Sie könnten versuchen, den Puffer zu leeren, indem Sie std::cout << line << std::endl;
anstelle von std::cout << line << "\n";
ausführen oder std::cout.flush()l
vor sleep(1);
aufrufen. Beide Wege sollten zuverlässig mit clang und gcc funktionieren.
Antworten auf diese Fragen erklären das Puffern wirklich gut:
Ich habe es mit Ihrem Code versucht und es funktioniert gut.
kompilierter Code mit folgendem Befehl:
%Vor%Ich habe zwei Terminals geöffnet: An einem Terminal zuerst temp.txt & amp; Führen Sie die Anwendung testmain aus. und von einem anderen echo Befehl ausführen und es würde gut funktionieren.
Sie wollen das erreicht haben oder Sie haben etwas anderes versucht ...
Versuchen Sie, ifs.sync()
nach sleep
aufzurufen. Ich konnte Ihr Problem mit dem von Ihnen geposteten Code reproduzieren und diese Änderung löste es für mich.
Es gibt auch ein scheinbar doppeltes clang 3.3 / Xcode & amp; libc ++: std :: getline liest keine Daten nach dem Aufruf von ifstream :: clear ()
Folgendes funktioniert beim Anhängen an eine Datei.
%Vor%Für den allgemeinen Fall (z. B. das Bearbeiten von Dateiabkürzungen usw.) könnten Sie mit tellg / seekg arbeiten.
Tags und Links c++ clang macos clang++ llvm-clang