我想在 USB 鼠标断开连接时收到通知(不仅仅是读取失败)。我使用带有标志的 epoll
EPOLLIN | EPOLLERR | EPOLLRDHUP | EPOLLET
我用了
read(fd, struct input_event, sizeof input_event)
我等待来自鼠标的事件。一切都很好,工作正常,直到我点击鼠标按钮。这会同时生成两个事件。一个是 EV_MSC/MSC_SCAN 事件,另一个是 EV_KEY/BTN_LEFT。如果我只读取一个事件(即使用 len 24 的缓冲区读取),我会收到另一个 EPOLL 通知,并且读取会再次获得 EV_MSC 事件。如果我使用大小为 48 的缓冲区读取,我会得到两个事件。
处理这种情况的正确方法是什么。在读取事件处理程序中获得 EAGAIN 之前,我是否应该继续阅读?