我想在Linux(Ubuntu发行版)中实现一个模仿tail -f
的C程序。请注意,我不想从我的C代码中实际调用tail -f
,而是实现其行为。目前我可以想到两种方法来实现它。
话虽如此,我的问题是如何实施第二种方法,如果有人可以分享是否值得努力。另外,这些只是两个选项吗?
注意:感谢您的评论,问题会根据它们进行更改。
答案 0 :(得分:1)
没有用于监视文件更改的标准化机制,因此您无论如何都需要实现“轮询”解决方案(也就是说,当您点击文件末尾时,请等待很短的时间再试一次。 )
在Linux上,您可以使用inotify
系列调用,但要注意它并不总是有效。例如,它不适用于特殊文件或远程文件系统,它可能不适用于某些本地文件系统。在符号链接的情况下它很复杂。等等。有一个Windows等价物,但我相信它会遇到一些相同的问题。
因此,即使您使用通知系统,也需要轮询解决方案作为备份,并且由于不保证操作系统通知可靠(即,如果系统处于负载状态,可能会丢弃通知),即使您使用的是通知系统,也需要在超时时进行轮询。
您可能需要查看GNU tail
实用程序(http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c)的实现,以了解特殊情况的处理方式。
答案 1 :(得分:0)
您可以按以下步骤实施要求: 1)以'a +'模式开启; 2)选择打开的文件discriptor(需要从FILE *转换为文件描述符)并进行读取。