如何在 Rust 中使用 epoll

How to use epoll in rust

我遇到了 this 库来支持 epoll in rust 但我不确定如何正确使用 epoll:wait 函数:

let mut events = [Event; 10];
rc = epoll::wait(self.vfio_epoll_fd, timeout, &mut events)?;

如果有人能为我提供一些入门示例,那就太好了:)在此先感谢您的支持。

编译上述代码时出现以下错误:

error[E0423]: expected value, found struct `Event`
   --> src/interrupts.rs:132:27
    |
132 |         let mut events = [Event; 10];
    |                           ^^^^^ did you mean `Event { /* fields */ }`?

事件结构如下所示:

pub struct Event {
    pub events: Events,
    pub data: u64,
}

问题是我不知道 Events 是什么,因为它是位标志。

由于 eventsepoll::wait 的输出参数,您可以在其中输入任何内容,但您需要输入有效值。一个合理的默认值是一个空的事件集:

let mut events = [Event::empty(); 10];

Events 是由 bitflags 宏生成的结构体,因此查看源代码对理解如何使用它没有多大帮助,但幸运的是 bitflags 也生成生成的结构非常全面documentation