sysfs_notify是否引发POLLPRI / exceptfds设计错误?

问题描述

根据POSIX poll,它显示POLLPRI

可以读取高优先级数据而不会阻塞。

这是一个特殊的 read 事件,可能会读取OOB数据等。

现在在Linux中,如果打开/sys/class/gpio/gpio<N>/value并通过POLLIN监听poll或在readfds注册select,则该事件将是永久性的,并且这些函数连续退出而无需等待实际中断。为了在用户空间中接收实际的中断,必须在POLLPRI / poll()注册epoll()或在exceptfds注册select()。实际上,GPIO sysfs interface的内核文档明确要求这样做。如果深入研究,gpiolib最终会在value文件上引发sysfs_notify(),这在用户空间中翻译为POLLPRI

我的理解是,从中断时间到用户空间read()的时间,GPIO的值可能已更改。并非大多数GPIO设备都由时钟调节并与cpu保持同步。因此,内核只能在GPIO线上告诉用户空间“ 发生了什么”,并且可能无法绝对保证说出“ ”状态已经更改,并且值得阅读”。因此,在没有POLLPRI的情况下筹集POLLIN似乎是合乎逻辑的。

所以我的问题是:

  1. 在Linux中,sysfs_notify()是否引发了POLLPRI而不引起POLLIN错误libev的作者声称这是一个设计错误,但我找不到其他文件表明这样做。
  2. POLLPRI是否可以独立于POLLIN? POSIX并没有明确地说出这一点,我也没有遇到另一个子系统执行类似的事情。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)