gpt4 book ai didi

c - 如何编写类似 C 程序的 tail -f

转载 作者:行者123 更新时间:2023-11-30 21:02:49 25 4
gpt4 key购买 nike

我想在 Linux(Ubuntu 发行版)中实现一个模仿 tail -f 的 C 程序。请注意,我不想从我的 C 代码中实际调用 tail -f,而是实现其行为。目前我能想到两种实现方式。

  1. 当程序被调用时,我会查找文件末尾。之后,我会定期读取文件末尾并打印我读取的内容(如果它不为空)。
  2. 第二种可能更有效的方法是再次查找文件末尾。但是,这次我“以某种方式”监听该文件的更改并读取到文件末尾,只有当我更改它时。
话虽如此,我的问题是如何实现第二种方法,以及是否有人可以分享是否值得付出努力。另外,这是唯一的两个选择吗?

注意:感谢您的评论,问题根据这些评论进行了更改。

最佳答案

没有标准化的机制来监视文件的更改,因此您无论如何都需要实现“轮询”解决方案(也就是说,当您到达文件末尾时,等待一小段时间然后重试。 )

在 Linux 上,您可以使用 inotify 系列系统调用,但请注意,它并不总是有效。例如,它不适用于特殊文件或远程文件系统,并且可能不适用于某些本地文件系统。对于符号链接(symbolic link)来说,情况很复杂。等等。 Windows 中有一个类似的版本,但我相信它也存在一些相同的问题。

因此,即使您使用通知系统,您也需要轮询解决方案作为备份,并且由于操作系统通知不能保证可靠(也就是说,如果系统处于负载状态,通知可能会被丢弃),即使您使用通知系统,您也需要在超时时进行轮询。

您可能想查看 GNU tail 实用程序 ( http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c ) 的实现,以了解如何处理特殊情况。

关于c - 如何编写类似 C 程序的 tail -f,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com