Przeczytałem to w one of Perl manuals, ale można je łatwo przetłumaczyć na standardowe C, które z kolei można przetłumaczyć na istream
.
seek FILEHANDLE,POSITION,WHENCE
Sets FILEHANDLE's position, just like the "fseek" call of
"stdio".
<...>
A WHENCE of 1 ("SEEK_CUR") is useful for not moving the file
position:
seek(TEST,0,1);
This is also useful for applications emulating "tail -f". Once
you hit EOF on your read, and then sleep for a while, you might
have to stick in a seek() to reset things. The "seek" doesn't
change the current position, but it does clear the end-of-file
condition on the handle, so that the next "<FILE>" makes Perl
try again to read something. We hope.
O ile pamiętam, fseek
nazywa iostream::seekg
. Więc powinieneś zrobić to samo: szukaj do końca pliku, następnie przespij się i poszukaj ponownie flagą ios_base::cur
, aby zaktualizować koniec pliku i odczytać więcej danych.
Zamiast sleep
, można za pomocą inotify, zgodnie z sugestią w the other answer, przespać się (blokować czytanie z pliku emulowanego, faktycznie) dokładnie do czasu, gdy plik zostanie zaktualizowany/zamknięty. Ale to jest specyficzne dla Linuksa i nie jest standardowym C++.
Można mieć twardy czas robi to w czystym C++ . Będziesz musiał użyć API specyficznego dla platformy. (Na początek, nie sądzę, że można otworzyć plik w C++ nie wyłącznie.) – sbi
@sbi Nie sądzę, że standard C++ ma coś do powiedzenia na wyłączność. –
Czy jest jakiś powód, dla którego nie można po prostu użyć tail -f? –