Я прочитал это в one of Perl manuals, но его легко перевести в стандарт C, который, в свою очередь, можно перевести на 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.
Насколько я помню, fseek
называется iostream::seekg
. Поэтому вы должны в основном сделать то же самое: искать до конца файла, а затем снова спящий и искать с флагом ios_base::cur
, чтобы обновить конец файла и прочитать еще несколько данных.
Вместо sleep
, вы можете использовать inotify, как предложено в the other answer, для сна (на самом деле блокировать при чтении из эмулируемого файла), пока файл не будет обновлен/закрыт. Но это зависит от Linux и не является стандартным C++.
Вы можете иметь трудное время, делая это в чистом C++ , Вам придется использовать некоторые API-интерфейсы для платформы. (Для начала я не думаю, что вы можете открыть файл на C++ не исключительно.) – sbi
@sbi Я не думаю, что на стандарте C++ есть что сказать об исключительности. – 2010-04-23 07:54:08
Есть ли причина, по которой вы не можете просто использовать tail -f? –