C ++ Warum druckt mein Code keine Aktualisierungen, die an der angegebenen Datei vorgenommen wurden?

9

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

%Vor%

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

%Vor%

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 ?

    
banarun 01.05.2015, 06:40
quelle

4 Antworten

2

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:

C ++ cout- und cin-Puffer und Puffer im Allgemeinen

Merkwürdiges Verhalten von std :: cout in Linux

    
daniq 13.05.2015 20:19
quelle
1

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 ...

    
Dipak D Desai 01.05.2015 07:38
quelle
1

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 ()

    
antron 15.05.2015 21:01
quelle
0

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.

    
Tasos Vogiatzoglou 01.05.2015 07:34
quelle

Tags und Links