Мне интересно, как вы можете реализовать программу, похожую на tail -f
в C/C++, программу, которая отслеживает и обрабатывает новые строки, добавленные в файл журнала?Реализация наблюдателя журнала
ответ
Вы можете использовать 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
Вы можете либо взывать к хвосту и получить поток обратно в ваше приложение, или, как это с открытым исходным кодом, может попытаться вытащить его в свой собственный код.
Кроме того, в C++ iostream можно открывать файл только для просмотра и просто читать до конца, буферизируя последние 10-20 строк, а затем выводить его.
Я думаю, что вы ищете вызов select() в c/C++. Я нашел копию страницы человека здесь: http://www.opengroup.org/onlinepubs/007908775/xsh/select.html. Выбор принимает файловые дескрипторы в качестве аргументов и сообщает вам, когда один из них изменился и готов к чтению.
Хвост программы с открытым исходным кодом, поэтому вы можете ссылаться на это. Я тоже задавался вопросом и смотрел код некоторое время назад, думая, что это будет довольно просто, но я был удивлен, насколько он был сложным. Есть много ошибок, которые нужно учитывать.
- 1. Реализация наблюдателя в JSP
- 2. Резьбовая реализация шаблона наблюдателя - C++
- 3. Реализация шаблона наблюдателя с winforms
- 4. Реализация шаблона наблюдателя с @Dependent
- 5. Реализация шаблона наблюдателя над RMI
- 6. Основная реализация наблюдаемого шаблона наблюдателя
- 7. Реализация шаблона наблюдателя с событиями
- 8. Реализация шаблона наблюдателя в C++
- 9. Реализация наблюдателя событий в Magento
- 10. Реализация текстового наблюдателя для EditText
- 11. Реализация шаблона MVC и наблюдателя
- 12. Реализация надежного журнала
- 13. имеет ли реализация наблюдателя утечка памяти?
- 14. Реализация шаблона наблюдателя в Smalltalk/VisualWorks
- 15. Реализация шаблона проектирования наблюдателя в 2 компьютерах
- 16. Реализация C++ -to-lua шаблона наблюдателя?
- 17. Реализация универсального шаблона наблюдателя/приемника для приложения
- 18. Реализация картины наблюдателя с C# MVC
- 19. Реализация шаблона наблюдателя в Delphi с интерфейсом
- 20. Реализация шаблона наблюдателя MVC с google guice
- 21. Реализация шаблона наблюдателя для моего приложения Rails
- 22. Реализация файла журнала в Golang
- 23. наблюдателя - передача информации наблюдателя
- 24. Образ наблюдателя - создание наблюдателя
- 25. Реализация шаблона наблюдателя в Java, одного и того же наблюдателя для нескольких классов
- 26. Образцовый шаблон наблюдателя наблюдателя с обработчиком
- 27. Реализация шаблона наблюдателя, когда наблюдатели хотят наблюдать за различными предметами
- 28. Реализация приемника событий/шаблон наблюдателя с помощью GreenDao
- 29. Реализация шаблона наблюдателя с использованием впрыска весенней зависимости
- 30. Реализация сигналов (шаблон наблюдателя): возможно изменение или const_cast?