【问题标题】:libevent during file deletion/modification文件删除/修改期间的 libevent
【发布时间】:2011-10-05 11:19:33
【问题描述】:

是否可以使用 libevent 来监控文件删除/更新?

假设 /var/log/file.1 被删除,我想在我的程序中报告它。这可能吗?如果是,怎么做?

我的操作系统是 Linux,我想创建一个在某些操作系统操作期间触发消息的恶​​魔。

在哪里可以找到更多信息?

【问题讨论】:

  • 您可以查看tail(-f 和-F)的来源,它们能够判断文件是否被截断。 IIRC,他们使用select(2)
  • 接受了 inotify 解决方案,看起来非常接近我正在寻找的内容

标签: c linux asynchronous file-descriptor libevent


【解决方案1】:

如果您的代码特别针对 Linux,您可以改用inotify(7) 工具。它有一个非常简单的编程接口,旨在监视文件的更改和删除,而libevent 的目的略有不同:监视一组描述符,并在其中任何一个准备好读/写时得到通知。

我不确定libevent 是否包含inotify,因为所有其他操作系统libevent 支持都没有提供类似的设施。

【讨论】:

    【解决方案2】:

    只要使用一些简单的逻辑,你就可以检查这个文件是否被删除了?

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    struct stat st = {0};
    
    if (stat("/var/log/file.1", &st) == -1) {
        printf("file is deleted or not present");
    }
    

    您还可以通过检查 struct stat 的另一个元素来检查文件的更多属性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多