Флаги файла FSEvents устанавливаются независимо от параметров создания потока событий

Согласно документации Apple, в обратный вызов 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* все еще устанавливаются, когда события передаются мне из FSEvents API. Я подозреваю, что это ошибка, но я не совсем уверен. Я использую OS X Lion 10.7.2.

Пример кода можно найти здесь. http://stuconnolly.com/downloads/scevents/

ИЗМЕНИТЬ

Вопрос в следующем:
У кого-нибудь еще были такие же результаты?
Могу ли я полагаться на это поведение при проверке флагов событий файла?


person Tony    schedule 05.02.2012    source источник
comment
упс, добавил вопрос. спасибо за указание   -  person Tony    schedule 05.02.2012
comment
Видеть то же самое. ОС 10.8.2 здесь. Это определенно не ведет себя так, как предлагает документация.   -  person John Bowers    schedule 27.11.2012
comment
В моем случае я тестирую как kFSEventStreamEventFlagItemCreated, так и kFSEventStreamEventFlagItemIsFile. Когда я создаю новый файл в отслеживаемом каталоге, вызывается обратный вызов, но эти флаги не устанавливаются!!   -  person Nicolas Miari    schedule 09.11.2013


Ответы (1)


На самом деле эти флаги устанавливаются нормально, хотя флаг выглядит неправильно.

Например, у вас есть флаг 133120. Это 0x20800. Итак, вы должны заметить «kFSEventStreamEventFlagItemRenamed = 0x00000800» и «kFSEventStreamEventFlagItemIsDir = 0x00020000».

То есть kFSEventStreamEventFlagItemRenamed и kFSEventStreamEventFlagItemIsDir — это то, что вам нужно.

person Kakashi    schedule 11.04.2017