我在想如何在C/C++中实现类似于tail -f
的程序,该程序监视并处理添加到日志文件中的新行?实现日志观察器
Q
实现日志观察器
3
A
回答
5
您可以使用fseek()来清除流上的eof条件。实质上,读到文件末尾,睡一会儿,fseek()(不改变你的位置)清除eof,再次读到文件结尾。洗涤,冲洗,重复。男子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
0
你既可以调出尾和检索流回到您的应用程序,或者它是开源的,也许尝试把它拉入自己的代码。
另外,C++ iostream有可能打开一个文件只能查看,只读到最后,缓存最后10-20行,然后输出。
0
我想你要找的是在c/C++中的select()调用。我在这里找到手册页的副本:http://www.opengroup.org/onlinepubs/007908775/xsh/select.html。选择将文件描述符作为参数,并告知您其中一个文件已更改并准备好读取。
0
尾巴程序是开源的,所以你可以引用它。我想知道同样的事情,并回头看了一下代码,认为这很简单,但我对它的复杂程度感到惊讶。有很多必须考虑的陷阱。
相关问题
- 1. java中的API的观察器实现
- 2. 为EditText实现文本观察器
- 3. 使用文件观察刷新使用PyQt4日志查看器
- 4. 观察日期android
- 5. 实现C++ -to-lua观察者模式?
- 6. 使用winforms实现观察者模式
- 7. 实现可观察集合的问题
- 8. Rails 3的观察 - 想学习如何实现观察员多个型号
- 9. android-如何实现文本观察器,例如
- 10. 如何实现日志?
- 11. 淘汰赛控制台日志和观察未定义
- 12. AWS云观察日志流代表什么?
- 13. KVO观察与NSNotificationCenter观察
- 14. 实施观察的失败,因为离子2忘记观察
- 15. 观察员可以观察多个可观察物吗?
- 16. 观察
- 17. Java观察器问题
- 18. C++的可观察容器
- 19. 选择器可观察 - RxSwift
- 20. 观察浏览器窗口
- 21. 观察员与触发器
- 22. 文件观察器错误
- 23. Autosys文件观察器
- 24. 过滤器可观察到的由可观察到的
- 25. 在Java中实现观察者模式时避免暴露实现细节?
- 26. 观察者模式 - 观察者创建
- 27. 简单的观察到/观察员rxjs
- 28. Java观察者和可观察的
- 29. 如何在NSMutableArray中实现对象的关键值观察
- 30. 如何安全地实现观察者模式?