C 要为“分配多少内存”;事件“;epoll_wait中的指针

C 要为“分配多少内存”;事件“;epoll_wait中的指针,c,linux,epoll,C,Linux,Epoll,我试图理解epoll_wait中的“events”指针。当epoll_wait返回时,该指针是否指向存在所有事件结构的某个内存(不是由用户分配的)?或者我们必须为这个指针分配内存,然后传递指针,这样事件就会在那个内存位置被填满 如果必须分配内存,那么应该分配多少?假设我想在10000个插座上做一个epoll_等待。所有这些都要检查是否有要读取的数据(EPOLLIIN)。那么,我应该为*事件分配相当于10000个事件结构的内存吗 谢谢 VSN您是否查看了手册页中的示例?您需要提供实际的事件数组,或

我试图理解epoll_wait中的“events”指针。当epoll_wait返回时,该指针是否指向存在所有事件结构的某个内存(不是由用户分配的)?或者我们必须为这个指针分配内存,然后传递指针,这样事件就会在那个内存位置被填满

如果必须分配内存,那么应该分配多少?假设我想在10000个插座上做一个epoll_等待。所有这些都要检查是否有要读取的数据(EPOLLIIN)。那么,我应该为*事件分配相当于10000个事件结构的内存吗

谢谢


VSN

您是否查看了手册页中的示例?您需要提供实际的事件数组,或者像示例中那样作为适当的数组,或者通过分配堆的大小(稍后释放它)来提供

MaxEvents是指数组在元素中的大小。如果分配的内存大小为
sizeof(epoll\u事件)*10
,则
maxEvents
为10。MaxEvents与您正在收听的套接字数量无关。

我没有看到这个。。。我在看另一个“。这意味着,我必须给出与我将“epoll_wait”打开的套接字数量相同的事件结构(作为数组或堆上的内存)。对吗?我以为MAXEVENTS是我期望设置的事件数。例如,EPOLLIN是一个事件,epolout是另一个事件。我错了吗?@VSN关于你的第一个问题,是的,没错。仔细想想,我曾经制作了一个带有epoll事件“数组”的服务器,每次客户端连接/断开连接时都会重新分配该数组。但是没有任何代码了。关于你的第二个问题,我不记得了。它是一个位域,所以你可以在一个事件结构中获得两个事件。非常感谢!真的很有帮助。是的,事实证明maxevents必须是您希望设置的套接字数量,其中位字段将指示多个事件(EPOLLIN、EPOLLOUT等)。此外,您的答案由