Macos FSEventStream:kFSEventStreamCreateFlagIgnoreSelf标志做什么?

Macos FSEventStream:kFSEventStreamCreateFlagIgnoreSelf标志做什么?,macos,fsevents,Macos,Fsevents,我正在使用OSX FSEventStream监视特定目录中的文件系统更改。我在查看文档时发现了一个有趣的标志,kFSEventStreamCreateFlagIgnoreSelf 根据使用此标志的文档,FSEvents框架不会通知您“由当前进程触发的事件” 听起来不错。这正是我想要的,但在实践中,我发现我仍然得到一些由当前进程触发的事件 在我的有限测试中,如果监视过程创建了一个新文件,或者重命名了现有文件,那么仍然会触发一个事件。至少对现有文件的某些修改不会触发事件 基于有限的文档(以及标志的名

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

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

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

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

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

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


第二:如果是,是否有人知道在使用此标志时,哪些事件仍然可以传递。

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


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

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

但是,同时设置kFSEventStreamCreateFlagMarkSelf和
kFSEventStreamCreateFlagIgnoreSelf
(使用按位OR(
|
)对我来说是个好办法。我不再收到关于我的应用程序保存的文件(在我的例子中是文档)的通知


kFSEventStreamCreateFlagMarkSelf
从OS X 10.9开始提供。

这应该是一个注释,而不是答案。我知道你还没有足够的代表发表评论,但是发布答案并不是最好的主意(他们可能会被标记)。它记录在头文件中。你知道怎么处理这个问题吗?你有解决这个问题的办法吗?