【问题标题】:Is there an async way of knowing a file has changed?是否有异步方式知道文件已更改?
【发布时间】:2014-12-10 23:05:05
【问题描述】:

我想异步监控文件的任何更改。也就是说,当文件被修改/删除时,我想在我的程序中进行回调(可能来自内核)。该文件只是一个纯文本文件。我知道可以使用轮询机制来做到这一点,但我正在寻找一种基于事件的解决方案。我阅读了有关 inotify 的信息,但看起来它需要修补我的内核。

如果解决方案符合 POSIX 标准,那就更好了。

【问题讨论】:

    标签: c++ file unix filesystems posix


    【解决方案1】:

    Inotify 早在 2005 年就被合并到 Linux 内核中,所以除非您使用的是一个非常旧的系统,否则您应该可以直接使用它。

    我认为不存在符合 POSIX 标准的解决方案。 Mac OS X 有FSEvents

    还要检查 man page 的 inotify。

    编辑:

    不知道您的约束和/或要求,但是如果您使用 Glib(C++ 绑定是 glibmm)还有 GFileMonitorQFileSystemWatcher 您使用 Qt。这些可能更适合跨平台。

    【讨论】:

    • 这是一个使用 inotify 等待文件出现的小例子,如果有帮助的话 - lazarenko.me/tips-and-tricks/… 它可以很容易地调整以监视文件更改。
    【解决方案2】:

    SGI 的fam 已被移植到多个 Unix。还有gamin

    【讨论】:

      【解决方案3】:

      1)

      编写一个设备驱动程序来创建一个名为 /dev/special_file 的文件。

      将纯文本文件符号链接到 /dev/special 文件

      拦截低级读/写操作以修改名为 /path/to/text.txt 的真实文本文件,然后通过信号或某种类型的进程间通信生成回调到您想要的任何进程。

      2)

      让进程打开您的文本文件,然后坐等。使用 select() 检测该文件何时被修改,然后执行回调例程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-26
        • 2020-06-03
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多