嗨我需要在我在epoll中监视的描述符中有一个特定的文件描述符来阻止一个描述符用于一个不断获取广播消息的套接字,但用户必须在键盘中键入一个动作,这是我的另一个描述符这是我需要阻止的那个因为我开始输入然后另一个广播消息到达并且弄乱了我正在写的东西。
有没有办法暂停文件描述符的事件以检测数据就绪,或者在数据准备就绪时阻止另一个文件描述符?
答案 0 :(得分:0)
你有几种方法可以去。
如果您正在使用EPOLLET
(边缘触发),那么唤醒时的事件处理程序可以首先检查您是否正在处理来自控制台的输入类型的输入。如果是这样,它可能无法读取任何内容,但设置了一个标志。当键入的输入处理程序完成后,它会检查该标志,并手动唤醒套接字输入处理程序来处理数据。
如果您正在使用级别触发,则可以通过修改该文件描述符的事件集来抑制该事件,从而抑制您要忽略的事件。这可以是EPOLL_CTL_MOD
使用一组新事件,也可以使用EPOLL_CTL_DEL
从epoll
取消注册文件描述符。在完成类型化输入处理程序后,您将添加回被抑制的内容。