小编典典

使用inotify的正确方法是什么?

linux

我想inotify在Linux上使用该机制。我希望我的应用程序知道何时aaa更改了文件。能否请您提供给我一个示例,该怎么做?


阅读 373

收藏
2020-06-02

共1个答案

小编典典

inotifyC API

inotify 提供了三个系统调用来构建各种文件系统监视器:

  • inotify_init()``inotify在内核中创建子系统的实例,并在成功和-1失败时返回文件描述符。与其他系统调用一样,如果inotify_init()失败,请检查errno诊断。
  • inotify_add_watch()顾名思义,它增加了一块 手表 。每个监视都必须提供路径名和相关事件的列表,其中每个事件都由常量指定,例如IN_MODIFY。要监视多个事件,只需在每个事件之间使用逻辑或-(C中的管道(|)运算符)。如果inotify_add_watch()成功,则该调用返回已注册手表的唯一标识符;否则,返回-1。使用标识符来更改或删除关联的手表。
  • inotify_rm_watch() 删除手表。

read()close()还需要系统调用。给定描述符由产生inotify_init(),调用read()以等待警报。假定使用典型的文件描述符,应用程序将阻止等待事件接收,这些事件在流中表示为数据。从inotify_init()删除和释放所有活动的监视以及与inotify实例相关联的所有内存产生的文件描述符上的公共close()。(典型的引用计数注意事项在这里也适用。必须释放与实例关联的所有文件描述符,然后释放手表和inotify消耗的内存。)

#include "inotify.h"  
#include "inotify-syscalls.h"  
int wd;  
wd = inotify_add_watch (fd,  
            "/home/rlove/Desktop", IN_MODIFY | IN_CREATE | IN_DELETE);
if (wd < 0)
      perror ("inotify_add_watch");

此示例在目录/ home / rlove / Desktop上添加了一个监视程序,用于进行任何修改,创建文件或删除文件。

2020-06-02