gpt4 book ai didi

macos - kqueue 的 EV_RECEIPT 究竟是做什么用的?

转载 作者:行者123 更新时间:2023-12-04 21:09:34 30 4
gpt4 key购买 nike

kqueue mechanism有一个事件标志,EV_RECEIPT ,根据链接的手册页:

... is useful for making bulk changes to a kqueue without draining any pending events. When passed as input, it forces EV_ERROR to always be returned. When a filter is successfully added the data field will be zero.



然而,我的理解是,在不耗尽任何挂起事件的情况下对 kqueue 进行批量更改是微不足道的,只需为 nevents 传递 0 即可。 kevent 的参数因此不会从队列中提取任何事件。考虑到这一点,为什么 EV_RECEIPT有必要吗?

一些 sample code在 OS X 的 Apple 文档中,实际上使用了 EV_RECEIPT:
kq = kqueue();

EV_SET(&changes, gTargetPID, EVFILT_PROC, EV_ADD | EV_RECEIPT, NOTE_EXIT, 0, NULL);
(void) kevent(kq, &changes, 1, &changes, 1, NULL);

但是,作为 changeskevent 之后永远不会检查数组打电话,我完全不清楚为什么 EV_RECEIPT在这种情况下使用。

EV_RECEIPT 真的有必要吗?在什么情况下它真的有用?

最佳答案

如果您进行批量更改并且其中之一导致错误,则该事件将放置在 eventlist 中。 EV_ERROR 设置在 flags以及 data 中的系统错误.

因此可以确定哪个 changelist元素导致错误。

如果您设置 nevents归零,您会得到错误代码,但没有指示是哪个事件导致了错误。

所以EV_RECEIPT允许你设置nevents到非零值而不消耗任何挂起的事件。

关于macos - kqueue 的 EV_RECEIPT 究竟是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731435/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com