文件删除/修改期间的 libevent

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

您可以查看tail(-f 和-F)的来源,它们能够判断文件是否被截断。 IIRC,他们使用select(2) 接受了 inotify 解决方案,看起来非常接近我正在寻找的内容 【参考方案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 的另一个元素来检查文件的更多属性

【讨论】:

以上是关于文件删除/修改期间的 libevent的主要内容,如果未能解决你的问题,请参考以下文章

关闭窗口期间删除文件[重复]

使用libev监视文件夹下文件(夹)属性变动的方案和实现

使用libev监视文件夹下文件(夹)属性变动的方案和实现

linux怎么查看memcached安装目录

libevent,动态添加或删除事件,无需更改事件循环

libev学习笔记