3

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

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

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

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

根据有限的文档(和标志的名称),我不希望当前进程触发任何事件。

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

第二:——如果是,有谁知道在使用这个标志时我可以期望哪些事件仍然被传递。

4

2 回答 2

3

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

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

于 2012-12-06T01:42:10.223 回答
2

我还观察到设置kFSEventStreamCreateFlagIgnoreSelf标志没有效果。

但是,同时设置thekFSEventStreamCreateFlagMarkSelf和 the kFSEventStreamCreateFlagIgnoreSelf(使用按位 OR ( |) )对我有用。我不再收到有关我的应用程序保存的文件(在我的情况下是文档)的通知。

kFSEventStreamCreateFlagMarkSelf自 OS X 10.9 起可用。

于 2016-05-03T19:50:09.403 回答