【问题标题】:How to get modified data from a file in linux?如何从linux中的文件中获取修改后的数据?
【发布时间】:2013-07-07 05:33:27
【问题描述】:

我正在为我的工具设计一个记录器插件。我在目标板上有一个busybox系统日志,我想从中获取系统日志数据,以便我可以通过我的主机转发到我的主机(而不是通过系统日志的远程端口转发)自己的通信框架。最初我利用 syslog 将它收到的消息转发到命名管道的能力,但这只能通过补丁添加来工作,这在我的情况下是不可行的。所以现在我的想法是在 syslog 中编写一个配置文件来将它收到的所有日志消息转发到一个文件并跟踪文件以获取我的数据。我可以使用 tail 函数来监视我的文件更改,但我的 busybox tail 不支持“--follow”选项,因为 syslog 执行 logrotate 导致“tail - f" 失败。而且我不确定这是否是一个好方法。所以我想问的是还有另一种方法可以从文件中获取修改后的数据。我可以使用 inotify,但这可以仅用于跟踪文件更改。那么有没有办法做到这一点?

【问题讨论】:

    标签: c linux syslog


    【解决方案1】:

    您可以尝试“diff”实用程序(或具有更多功能的 git-diff)。

    【讨论】:

    • 我不能使用 diff 实用程序,因为它用于比较文件,但在我的情况下,我需要将新添加的数据从日志文件获取到内存,例如:命名管道,所以我检索数据从这个记忆中发送给我的主人
    【解决方案2】:

    您可以编写一个可以接收 inotify 事件的脚本/程序。并且脚本重新打开文件并从先前保存的最后读取文件位置开始读取直到 EOF。

    【讨论】:

    • 但是 syslog logrotates 它的文件,所以这可以工作,直到我的文件被 logrotated 在这种情况下,我的文件的最后读取位置将变得无效并且 inotify 将阻塞一个事件,我不能使用阻塞调用,因为我的记录器程序是通信框架的一部分,阻止调用是不可行的。
    • 对于日志轮换,我猜应该指定一个最大尺寸。您可以根据此最大搜索修改搜索位置。而 inotify 可以为您提供最新更改的开始和结束。
    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多