C语言 - 使用进程监控文件

4

我必须监视一定数量的日志文件(可以随时更改),以查看它们是否包含结构体中的“禁止”单词。在实现过程中,我对最佳实现方式有些疑虑。

  1. 是否有一个分析要监视的文件列表的进程是个好主意?每次我们看到其中一个文件已更改时,我们都会发送一个进程来查看它是否包含某些“禁止”单词?
  2. 作为日志文件,修改仅发生在末尾,因此要查看文件是否已更改,我们必须查看其大小是否也已修改。进行“主动等待”:
While(1)
 if (“old size!= new size”)
  send process run for this file to see if contains some words “forbidden”.

有谁能给我一些想法,并告诉我我所做的是否有错误?


1
操作系统为此类事情提供了特殊的接口。您需要不同操作系统的解决方案吗?还是可以限制在特定的操作系统上? - Dima Chubarov
如果您跟踪了先前的大小,那么您可以将seek()到该位置,仅读取和检查新内容。 - tripleee
我完全同意Dmitri Chubarov的观点,例如对于Linux,你可以使用inotify。这是你可以使用的东西吗? - Fred
@fred 你有没有想过为什么 less 在 Linux 上不使用 inotify? - gcbenison
1个回答

0

这似乎与less针对单个文件所做的非常相似。使用strace,我稍微查看了一下less的操作,它似乎只是保持打开文件描述符,然后循环睡眠一秒钟并尝试读取更多输入。如果要监视的日志文件不太多(而且您不介意为每个文件保留一个打开的文件描述符),也许您可以使用这种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接