Как прослушать изменения файловой системы MAC - kFSEventStreamCreateFlagWatchRoot

Я слушаю изменения каталога и диска в проекте Какао, используяFSEvents, Мне нужно получить события, когда корневая папка переименована или удалена. Итак, я прошелkFSEventStreamCreateFlagWatchRoot при созданииFSEventStream, Но даже если я удаляю или переименовываю корневую папку, я не получаю соответствующуюFSEventStreamEventFlags, Любая идея, что может быть проблемой. Я слушаю изменения в USB-устройстве. Я использовал обаFSEventStreamCreate а такжеFSEventStreamCreateRelativeToDevice, Одна вещь, которую я замечаю, это когда я пытаюсьFSEventStreamCreate Я получаю следующее сообщение об ошибке при создании :()::FSEventStream

CarbonCore.frameworkFSEventStreamCreatewatch_all_parents

ошибка при попытке добавить kqueue для (fd 7/Volumes/NO NAME; Операция не поддерживается)

Но сFSEventStreamCreateRelativeToDevice ошибок нет но все равно не получаетсяkFSEventStreamEventFlagRootChanged в флагах событий. Кроме того, при создании с использованиемFSEventStreamCreateRelativeToDevice яблоко сказать "s если я хочу прослушать изменения корневого пути, передайте пустую строку"", Но я не могу прослушать изменения корневого пути, передав пустую строку. Но когда я прохожу"/" оно работает. Но даже для"/" Я не понимаюFSEventStreamEventFlags, Я вставляю код здесь:

-(void) subscribeFileSystemChanges:(NSString*) path
{
    PRINT_FUNCTION_BEGIN;

    // if already subscribed then unsubscribe
    if (stream)
    {
        FSEventStreamStop(stream);
        FSEventStreamInvalidate(stream); /* will remove from runloop */
        FSEventStreamRelease(stream);
    }

    FSEventStreamContext cntxt = {0};
    cntxt.info = self;

    CFArrayRef pathsToWatch = CFArrayCreate(NULL, (const void**)&path, 1, NULL);


    stream = FSEventStreamCreate(NULL, &feCallback, &cntxt, 
                                 pathsToWatch, kFSEventStreamEventIdSinceNow, 1,
                                 kFSEventStreamCreateFlagWatchRoot );


    FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), 
                                     kCFRunLoopDefaultMode);

    FSEventStreamStart(stream);


}

Функция обратного вызова:

static void feCallback(ConstFSEventStreamRef streamRef, void* pClientCallBackInfo, 
                       size_t numEvents, void* pEventPaths, const    FSEventStreamEventFlags eventFlags[], 
                       const FSEventStreamEventId eventIds[]) 

{
char** ppPaths = (char**)pEventPaths; int i;

    for (i = 0; i < numEvents; i++)
    {
        NSLog(@"Event Flags %lu Event Id %llu", eventFlags[i], eventIds[i]); 
        NSLog(@"Path changed: %@", 
              [NSString stringWithUTF8String:ppPaths[i]]); 
    }    
}

Большое спасибо заранее.

Ответы на вопрос(2)

Ваш ответ на вопрос