多个 epoll 实例中的相同 fd 用于单独的写入和读取线程

多个 epoll 实例中的相同 fd 用于单独的写入和读取线程

我们可以在多个 epollfds 中使用同一个 fd 吗?我的意思是一个 epoll 实例用于捕获 EPOLLIN,一个 epoll 实例用于捕获 EPOLLOUT。

例如:

int fd = ... // the file descriptor
int epoll_reader = epoll_create1(0); // first epoll instance for reading
int epoll_writer = epoll_create1(0); // second epoll instance for writing

为了阅读我需要这些标志:EPOLLIN | EPOLLET

但对于写作,我不希望它是边缘触发的,我希望它是水平触发的,并且只传递EPOLLOUT

注册为读者:

struct epoll_event ev;
ev.data.fd = fd;
ev.events = EPOLLIN | EPOLLET;
epoll_ctl(epoll_reader, EPOLL_CTL_ADD, fd, &ev);

注册作家:

struct epoll_event ev;
ev.data.fd = fd;
ev.events = EPOLLOUT;
epoll_ctl(epoll_writer, EPOLL_CTL_ADD, fd, &ev);

这样做的原因是将 EPOLLIN 捕获为边缘触发器,将 EPOLLOUT 捕获为水平触发器。

由于我的代码库太大,我无法修改和测试它,我必须确保对代码进行任何更改。

相关内容