Сведения о вопросе

Killer

16:14, 16th August, 2020

Теги

c++   c   file   io    

Реализация наблюдателя журнала

Просмотров: 374   Ответов: 4

Мне интересно, как вы можете реализовать программу, подобную tail -f в C/C++, программе, которая отслеживает и обрабатывает новые строки, добавленные в файл журнала?



  Сведения об ответе

SILA

16:47, 7th August, 2020

Вы можете использовать fseek(), чтобы очистить условие eof в потоке. По существу, прочитайте до конца файла, спите некоторое время, fseek() (без изменения позиции), чтобы очистить eof, снова прочитайте до конца файла. промыть, прополоскать, повторить. man fseek (3) для деталей.

Вот как это выглядит в perl. perl 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


  Сведения об ответе

LAST

03:55, 13th August, 2020

Видеть здесь

Вы можете либо вызвать tail и получить поток обратно в свое приложение, либо, поскольку он является открытым исходным кодом, возможно, попытаться вытащить его в свой собственный код.

Кроме того, в C++ iostream можно открыть файл только для просмотра и просто прочитать до конца, буферизуя последние строки 10-20, а затем вывести их.


  Сведения об ответе

$DOLLAR

11:40, 14th August, 2020

Я думаю, что вы ищете вызов select() в c/c++. я нашел копию man-страницы здесь: http://www.opengroup.org/onlinepubs/007908775/xsh/select.html . Select принимает файловые дескрипторы в качестве аргументов и сообщает вам, когда один из них изменился и готов к чтению.


  Сведения об ответе

SKY

23:07, 24th August, 2020

Хвостовая программа с открытым исходным кодом, так что вы можете ссылаться на это. Я задался тем же вопросом и посмотрел на код некоторое время назад, думая, что это будет довольно просто, но я был удивлен тем, насколько сложным он был. Есть много gotchas, которые должны быть приняты во внимание.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться