kevent手册EVFILT_TIMER段fflags返回值表述含义咨询
kevent EVFILT_TIMER 文档理解疑问
查阅kevent man手册时,找到EVFILT_TIMER的说明片段如下:
EVFILT_TIMER Establishes an arbitrary timer identified by ident. When adding a timer, data specifies the moment to fire the timer (for NOTE_ABSTIME) or the timeout period. The timer will be periodic unless EV_ONESHOT or NOTE_ABSTIME is specified. On return, data contains the number of times the timeout has expired since the last call to kevent(). For non-monotonic timers, this filter automatically sets the EV_CLEAR flag internally. The filter accepts the following flags in the fflags argument: NOTE_SECONDS data is in seconds. NOTE_MSECONDS data is in milliseconds. NOTE_USECONDS data is in microseconds. NOTE_NSECONDS data is in nanoseconds. NOTE_ABSTIME The specified expiration time is absolute. If fflags is not set, the default is milliseconds. On return, fflags contains the events which triggered the filter.
疑问
无法理解说明最后一行 On return, fflags contains the events which triggered the filter. 的含义:按照定义,event本身是结构体类型,fflags是kevent结构体的字段,为什么描述中称fflags会包含"events"?
更新
经确认,EVFILT_TIMER对应的fflags返回值与传入的参数值一致。
解答
这是BSD系统手册通用表述带来的歧义,这里的"events"不是指完整的struct kevent事件对象,而是指触发过滤器的状态标志位:
- kqueue的不同过滤器对返回阶段
fflags字段的用法不同:类似EVFILT_READ、EVFILT_PROC这类过滤器,事件触发时会在fflags字段写入具体的触发原因标志,比如读事件遇到EOF、监控的进程退出等,这些标志就是手册描述里提到的"触发过滤器的事件"。 - 对
EVFILT_TIMER来说,没有这类额外的触发状态标志需要返回,所以事件返回时fflags的值和注册定时器时传入的配置标志(时间单位、是否为绝对时间等)完全一致,不会新增内容。实际使用定时器时,只需要读取返回的data字段,拿到上次kevent调用以来的超时触发次数即可,不需要特殊处理返回的fflags字段。
内容的提问来源于stack exchange,提问作者jorge is not ai
相关产品推荐
相关产品推荐

