FSEventStream:kFSEventStreamCreateFlagIgnoreSelf标志有什么作用?

时间:2012-11-27 22:44:13

标签: macos fsevents

我正在使用OSX FSEventStream监视特定目录中的文件系统更改。我正在查看文档here,我发现了一个有趣的标志,kFSEventStreamCreateFlagIgnoreSelf。

根据使用此标志的文档,FSEvents框架不会通知您“当前进程触发的事件。”

听起来不错。这正是我想要的,但在实践中我发现我仍然得到一些由当前流程触发的事件。

在我的有限测试中,如果监控过程创建新文件,或者重命名和现有文件仍然触发事件。虽然现有文件的至少一些修改不会触发事件。

基于有限的文档(以及标志的名称),我不希望当前进程触发任何事件。

所以我的问题有两个方面: - 这是预期的行为吗?我担心如果我指望它存在的行为,它可能是无意的,将来它可能会从我的下方改变。

第二: - 如果是,有没有人知道在使用这个标志时我仍然可以发送哪些事件。

2 个答案:

答案 0 :(得分:2)

我注意到在使用此标志时,我在进程中所做的任何文件更改都不会作为事件发送给我。如果我之后没有得到任何外部事件,我上次记录的eventId(下次我创建流时使用)将比我没有得到的事件更早,所以下次开始我的过程时我会看到这些事件,在事件历史转储中。

我很抱歉这不是一个很好的答案,但我观察到这可能有助于解释你所看到的内容。

答案 1 :(得分:1)

我也通过设置kFSEventStreamCreateFlagIgnoreSelf标志来观察不到效果。

然而,设置两者 kFSEventStreamCreateFlagMarkSelfkFSEventStreamCreateFlagIgnoreSelf(使用按位OR(|))对我来说是个窍门。我不再收到有关我的应用程序保存的文件(在我的情况下是文档)的通知。

自OS X 10.9起,

kFSEventStreamCreateFlagMarkSelf可用。