2013-03-25 2 views
1

Я эмуляция определенную функциональность Kqueue для обработки событий в моей коробке Centos (я портирование некоторый код из FreeBSD), но я не в состоянии понять цель void *udata в struct kevent:Что такое поле udata в struct kevent?

struct kevent { 
     uintptr_t ident;  /* identifier for this event */ 
     short  filter;  /* filter for event */ 
     u_short flags;  /* action flags for kqueue */ 
     u_int  fflags;  /* filter flag value */ 
     intptr_t data;   /* filter data value */ 
     void  *udata;  /* opaque user data identifier */ 
    }; 

Я пробовал поиск, но самая длинная форма литературы, которую я мог найти в этом поле, - «Непрозрачное пользовательское значение, прошедшее через ядро ​​без изменений». Это не очень помогает.

Может кто-нибудь, пожалуйста, объясните мне, что это за поле? И для чего кто-то мог его использовать?

ответ

2

Поле udata передается и выходит из ядра без изменений и равно не используется каким-либо образом. Использование этого поля полностью зависит от приложения и предоставляется в качестве способа эффективного выполнения процедуры отправки функции или иным образом добавить идентификатор приложения к структуре кевента.

для полной ссылки, пожалуйста, проверьте следующие бумаги:

Kqueue: A generic and scalable event notification facility

+0

Другими словами, я могу использовать его, чтобы указать на * что-нибудь, что я хочу. kevent() игнорирует поле, и он возвращается без изменений внутри активных событий. Я правильно понимаю это? – SidR

+0

yup, вы правы. – swpd

+0

Большое спасибо за бумагу. Очень информативно. – SidR

1

swpd правильно. Я хотел бы добавить, что концепция «пользовательских данных» широко используется в API обработки событий и тех, где функция обратного вызова предоставляется вызывающим абонентом. Пользовательские данные (как правило, указатель void) передаются обратно verbatim.

Другим примером пользовательских данных является (веб-) куки - когда веб-сервер устанавливает заголовок Set-Cookie, он просит браузер отправить содержимое обратно (в заголовке Cookie) с каждым последующим запросом. Браузер не должен каким-либо образом интерпретировать файлы cookie - так же, как ядро ​​не интерпретирует поле udata - просто отправьте его обратно.

 Смежные вопросы

  • Нет связанных вопросов^_^