无论事件流创建选项如何,都会设置FSEvents文件标志

时间:2012-02-05 03:27:21

标签: macos cocoa filesystems osx-lion fsevents

根据Apple documentation,在FSEvents的回调中,

/* These flags are only set if you specified the FileEvents */
/*   flags when creating the stream. */
kFSEventStreamEventFlagItemCreated = 0x00000100, 
kFSEventStreamEventFlagItemRemoved = 0x00000200, 
kFSEventStreamEventFlagItemInodeMetaMod = 0x00000400, 
kFSEventStreamEventFlagItemRenamed = 0x00000800, 
kFSEventStreamEventFlagItemModified = 0x00001000, 
kFSEventStreamEventFlagItemFinderInfoMod = 0x00002000, 
kFSEventStreamEventFlagItemChangeOwner = 0x00004000, 
kFSEventStreamEventFlagItemXattrMod = 0x00008000, 
kFSEventStreamEventFlagItemIsFile = 0x00010000, 
kFSEventStreamEventFlagItemIsDir = 0x00020000, 
kFSEventStreamEventFlagItemIsSymlink = 0x00040000 

但是,我在调用

时检查了kFSEventStreamCreateFlagFileEvents标志是否未设置
FSEventStreamRef FSEventStreamCreate( 
    CFAllocatorRef allocator, 
    FSEventStreamCallback callback, 
    FSEventStreamContext *context, 
    CFArrayRef pathsToWatch, 
    FSEventStreamEventId sinceWhen, 
    CFTimeInterval latency, 
    FSEventStreamCreateFlags flags);  

但无论我做什么,当事件从kFSEventStreamEventFlagItem* API传递给我时,仍然会设置FSEvents标志。我怀疑这是一个错误,但我不太确定。我正在使用OS X Lion 10.7.2

示例代码可以在这里找到。 http://stuconnolly.com/downloads/scevents/

修改

问题是:
还有其他人经历过相同的结果吗? 这是我可以依赖的行为来检查文件事件标志吗?

1 个答案:

答案 0 :(得分:0)

实际上,虽然标志看起来不对,但这些标志设置正常。

例如,你有一个标志133120.That是0x20800。 所以,你应该注意到“kFSEventStreamEventFlagItemRenamed = 0x00000800” 和“kFSEventStreamEventFlagItemIsDir = 0x00020000”。

也就是说,kFSEventStreamEventFlagItemRenamed& kFSEventStreamEventFlagItemIsDir就是你想要的。