代码之家  ›  专栏  ›  技术社区  ›  ian

kqueue dir extended watch执行什么操作?

  •  0
  • ian  · 技术社区  · 6 年前

    我在玩 rb-kqueue 在OS X上,我不知道如何获取 extend 要开火的旗子。

    来自 OpenBSD kqueue man page (也与OS X手册页匹配):

    注意:扩展描述符引用的文件被扩展

    这是非常圆形的。

    这个 FreeBSD kqueue man page 有:

    注意\扩展到常规文件,描述符引用的文件 已扩展。对于目录,报告目录项 由于重命名操作而添加或删除。注意事项 在目录中更改名称时,不会报告事件。

    这更具描述性,不过,我在一个目录上运行了一个kqueue,并尝试了一下,因为我可能无法启动extend标志。我试过了 mv , rename , xattr (因为搜索“扩展”会返回许多扩展属性的结果),添加子目录和文件 mkdir touch 和重定向但是 没有什么 结果是 延伸 标志是事件的一部分,只是 write 和/或 link .

    所以我很困惑 延伸 真的。只是因为我在OS X上运行它吗?

    感激地接受任何帮助或洞察。

    1 回复  |  直到 6 年前
        1
  •  1
  •   tukan    6 年前

    我希望对这个问题有所了解。

    国旗 NOTE_EXTEND 对应于对文件执行的操作。在您的情况下,当 文件大小已增加 .

    推理

    引用原稿- Kquote: A generic and scalable event notification facility :

    fflags字段用于指定描述符上的哪些操作 该申请在登记时感兴趣,并在返回时, 发生了哪些操作。可能采取的措施有:

    • 注释删除
    • 写笔记
    • 注释扩展
    • 注释属性
    • 注释链接
    • 注释重命名

    这些对应于文件系统在 文件,因此此处不作解释。这些注释可以是或-d 在返回的kevent中,如果发生了多个操作。 例如:写了一个文件,然后重命名。最终的一般目的 filter是进程筛选器,用于检测进程更改。为了这个 过滤器,标识字段被解释为进程标识符。这个 过滤器可以监视几种类型的事件,以及 控制此过滤器如图3所示

    图3用于 EVFILT PROC :

    Input/Output 旗帜:

    • NOTE EXIT 进程已退出。

    • NOTE FORK 调用的进程 Frk()

    • NOTE EXEC 进程通过execve(2)执行新进程或 类似的呼叫。

    • NOTE TRACK 在fork()调用之间执行一个过程。这个 父进程将返回 注释轨 在Flags字段中设置, 而子进程将返回 NOTE CHILD 设置为fflags和 数据中的父PID。

    Output 仅标记:

    • 注意子项 这是 被跟踪进程的子进程,该进程称为fork()。

    • NOTE TRACKERR 如果系统无法将事件附加到 子进程,通常是由于资源限制。