我们可以在多个 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 捕获为水平触发器。
由于我的代码库太大,我无法修改和测试它,我必须确保对代码进行任何更改。