struct kevent中的udata字段是什么?
问题描述:
我模仿的kqueue来处理我的Centos箱事件的某些功能(我移植从FreeBSD的一些代码),但我不理解的void *udata
在struct 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结构中。
完整参考,请查看以下文件:
答
swpd是正确的。我只想补充一点,“用户数据”的概念广泛应用于事件处理API以及由调用者提供回调函数的API。用户数据(通常是空白指针)传回逐字。用户数据的另一个例子是(网络)cookie - 当一个网络服务器设置了Set-Cookie头部时,它要求浏览器将每个后续请求发送回去(在Cookie头部)。浏览器不会以任何方式解释cookie - 就像内核不解释udata字段 - 只是将其发回。
换句话说,我可以用它指向任何我想要的东西。 kevent()忽略该字段,并且它在活动事件内部保持不变。我是否正确理解这一点? – SidR 2013-03-25 05:35:42
是的,你是对的。 – swpd 2013-03-25 05:39:43
非常感谢这篇论文。非常丰富。 – SidR 2013-03-25 05:40:43