




Вы можете либо вызвать в хвост и получить поток обратно в свое приложение, либо, поскольку это открытый исходный код, возможно, попытаться втянуть его в свой собственный код.
Кроме того, в C++ iostream можно открыть файл только для просмотра и просто прочитать его до конца, буферизуя последние 10-20 строк, а затем вывести их.
Вы можете использовать fseek (), чтобы очистить условие eof в потоке. По сути, прочитайте файл до конца, поспите некоторое время, fseek () (без изменения вашей позиции), чтобы очистить eof, повторное чтение до конца файла. постирать, прополоскать, повторить. man fseek (3) для получения подробной информации.
Вот как это выглядит в Perl. Функция поиска perl (), по сути, является оболочкой для fseek (3), поэтому логика такая же:
wembley 0 /home/jj33/swap >#> cat p
my $f = shift;
open(I, "<$f") || die "Couldn't open $f: $!\n";
while (1) {
seek(I, 0, 1);
while (defined(my $l = <I>)) {
print "Got: $l";
}
print "Hit EOF, sleeping\n";
sleep(10);
}
wembley 0 /home/jj33/swap >#> cat tfile
This is
some
text
in
a file
wembley 0 /home/jj33/swap >#> perl p tfile
Got: This is
Got: some
Got: text
Got: in
Got: a file
Hit EOF, sleeping
Затем в другом сеансе:
wembley 0 /home/jj33/swap > echo "another line of text" >> tfile
И вернемся к исходному выводу программы:
Hit EOF, sleeping
Got: another line of text
Hit EOF, sleeping
Я думаю, что вы ищете вызов select () в c / C++. Я нашел копию страницы руководства здесь: http://www.opengroup.org/onlinepubs/007908775/xsh/select.html. Select принимает файловые дескрипторы в качестве аргументов и сообщает вам, когда один из них был изменен и готов к чтению.
Программа с открытым исходным кодом, так что вы можете ссылаться на нее. Я подумал о том же самом и некоторое время назад посмотрел на код, думая, что он будет довольно простым, но был удивлен тем, насколько он сложен. Следует учитывать множество нюансов.