struct kevent中的udata字段是什么?

struct kevent中的udata字段是什么?

问题描述:

我模仿的kqueue来处理我的Centos箱事件的某些功能(我移植从FreeBSD的一些代码),但我不理解的void *udatastruct kevent目的:struct kevent中的udata字段是什么?

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 */ 
    }; 

我试过搜索,但是我能找到关于这个领域的最长文献形式是“不变地通过内核传递的不透明的用户定义值”。这没有多大帮助。

任何人都可以请清楚地向我解释这个字段是什么?而有人可以使用它?

udata字段被传入和传出内核不变,并且不以任何方式使用 。该字段的使用完全依赖于应用程序,并且作为有效实现功能调度例程的方式提供,或者以其他方式将应用程序标识符 添加到kevent结构中。

完整参考,请查看以下文件:

Kqueue: A generic and scalable event notification facility

+0

换句话说,我可以用它指向任何我想要的东西。 kevent()忽略该字段,并且它在活动事件内部保持不变。我是否正确理解这一点? – SidR 2013-03-25 05:35:42

+0

是的,你是对的。 – swpd 2013-03-25 05:39:43

+0

非常感谢这篇论文。非常丰富。 – SidR 2013-03-25 05:40:43

swpd是正确的。我只想补充一点,“用户数据”的概念广泛应用于事件处理API以及由调用者提供回调函数的API。用户数据(通常是空白指针)传回逐字。用户数据的另一个例子是(网络)cookie - 当一个网络服务器设置了Set-Cookie头部时,它要求浏览器将每个后续请求发送回去(在Cookie头部)。浏览器不会以任何方式解释cookie - 就像内核不解释udata字段 - 只是将其发回。