Я пытаюсь использовать kqueue и kevent для файла, и когда мой файл будет изменен, я обновлю свое программное обеспечение. И когда мой файл удален, я удаляю ссылку в своем программном обеспечении.
Итак, я инициализирую очередь
void myfct(char * path)
{
int kq;
int event_fd;
struct kevent events_to_monitor[NUM_EVENT_FDS];
struct kevent event_data[NUM_EVENT_SLOTS];
void *user_data;
struct timespec timeout;
unsigned int vnode_events;
kq = kqueue();
event_fd = open(path, O_EVTONLY);
user_data = path;
timeout.tv_sec = 0;
timeout.tv_nsec = 500000000;
vnode_events = NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_LINK | NOTE_RENAME | NOTE_REVOKE;
EV_SET( &events_to_monitor[0], event_fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, vnode_events, 0, user_data);
while (42)
{
int event_count = kevent(kq, events_to_monitor, NUM_EVENT_SLOTS, event_data, num_files, &timeout);
if (event_count)
{
// Display the right event in event_data[0].fflags
}
else
{
NSLog(@"No event.\n");
}
}
}
затем, когда я позвоню kevent и изменю свой файл
я получаю событие NOTE_ATTRIB, а затем NOTE_DELETE... почему?