Вы можете использовать fseek (), чтобы очистить условие eof в потоке. По сути, читайте до конца файла, спите некоторое время, fseek () (без изменения вашей позиции), чтобы очистить eof, снова прочитайте до конца файла. мыть, полоскать, повторять. man fseek (3) для деталей.
Вот как это выглядит в Perl. perl's seek () по сути является оберткой для 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