gpt4 book ai didi

C++ epoll 与 container_of

转载 作者:行者123 更新时间:2023-11-30 04:25:52 43 4
gpt4 key购买 nike

我想知道如何使用 container_of 设置 epoll。我正在使用最新版本的 ubuntu 和 eclipse-cdt (gcc)。我的想法是抓取事件,然后抓取事件来自的容器。

如果我有这样的结构:

struct client {
int s;
struct epoll_event e;
}foo;

然后……:

struct epoll_event *events = NULL;
struct client *c = NULL;
foo.s = (socket);
int efd = epoll_create1(0);
foo.e.data.fd = foo.s;
foo.e.events = EPOLLIN;
epoll_ctl ( efd , EPOLL_CTL_ADD , foo.s , &foo.e );
events = (struct epoll_event*)calloc ( XXX , sizeof event );
while(1) {
int n = epoll_wait ( efd , events , XXX , -1 );
for ( int i = 0 ; i < n ; i++ ) {
c = container_of ( events[i] , client , e );

我怎样才能做这样的事情?谢谢!

最佳答案

嗯,首先 events[i] 不是一个指针。要获取指针,请使用 events + i&events[i]

其次,数组中的epoll_event结构与client结构中的epoll_event结构不一样,也就是说你可以'不要使用 container_of

container_of 用法的一个有效示例:

client c;
epoll_event *ep = &c.e;

client *cp = container_of(ep, client, e);

如您所见,第一个参数必须指向您要访问的“容器”中的实际 成员。在此之后 cp 将指向 c

在你的情况下,你想要一个指针(正如我上面所说,实际上不是一个指针)指向 client 结构中的成员,那是行不通的。

关于C++ epoll 与 container_of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894978/

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