【问题标题】:What action does Kqueue dir extended watch?Kqueue dirextended 看什么动作?
【发布时间】:2018-07-12 15:37:44
【问题描述】:

我正在 OS X 上使用 rb-kqueue,但我不知道如何触发 extend 标志。

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

NOTE_EXTEND 描述符引用的文件已扩展

这是非常循环的。

FreeBSD kqueue man page 有:

NOTE_EXTEND 对于常规文件,描述符引用的文件 被延长。对于目录,报告目录条目是 添加或删除,作为重命名操作的结果。 NOTE_EXTEND 在目录中更改名称时不报告事件。

这更具描述性,但是,我一直在目录上运行 kqueue 并尝试我可能无法触发扩展标志。我试过mvrenamexattr(因为搜索“扩展”会返回很多扩展属性的结果),添加带有mkdirtouch的子目录和文件并重定向但nothing 导致 extend 标志成为事件的一部分,只是 write 和/或 link

因此,我对 extend 到底是什么感到困惑。仅仅是因为我在 OS X 上运行它吗?

【问题讨论】:

    标签: ruby osx-mavericks kqueue


    【解决方案1】:

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

    标志NOTE_EXTEND 对应于对文件执行的操作。在您的情况下,您应该在文件大小增加时触发该操作。

    推理

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

    fflags 字段用于指定描述符上的哪些操作 应用程序对注册感兴趣,并在返回时, 发生了哪些动作。可能的操作是:

    • 注意删除
    • 注意写
    • 注意扩展
    • 注意属性
    • 注意链接
    • 注意重命名

    这些对应于文件系统在 文件,因此这里不再解释。这些注释可能是 OR-d 如果发生了多个操作,则一起在返回的 kevent 中。 例如:一个文件被写入,然后重命名。最终的通用目的 filter 是 PROC 过滤器,它检测进程的变化。为了这 过滤器,ident 字段被解释为进程标识符。这 filter 可以监视多种类型的事件,以及 控制这个过滤器如图3所示

    EVFILT PROC 的图 3:

    Input/Output标志:

    • NOTE EXIT 进程已退出。

    • NOTE FORK 进程调用 fork()

    • NOTE EXEC 进程通过 execve(2) 或 类似的电话。

    • NOTE TRACK 在 fork() 调用中跟踪一个进程。这 父进程将返回并在标志字段中设置NOTE TRACK, 而子进程将返回并在 fflags 中设置 NOTE CHILD 和 数据中的父 PID。

    Output 仅标志:

    • NOTE CHILD 这是 调用 fork() 的 TRACKed 进程的子进程。

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

    【讨论】:

    • 谢谢,一旦你解释了它,我发现它很容易被点燃,太容易了,我不敢相信我以前不能让它工作,但无论如何我都很高兴! :) 非常感谢。
    • @iain 欢迎您:)。有时您可能会陷入很难看到其他任何东西的问题。需要注意的一件事是,FreeBSD 在...referenced by the descriptor was extended.
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2011-08-19
    相关资源
    最近更新 更多