问题描述
可以读取高优先级数据而不会阻塞。
这是一个特殊的 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
似乎是合乎逻辑的。
所以我的问题是:
- 在Linux中,
sysfs_notify()
是否引发了POLLPRI
而不引起POLLIN
的错误?libev
的作者声称这是一个设计错误,但我找不到其他文件表明这样做。 -
POLLPRI
是否可以独立于POLLIN
? POSIX并没有明确地说出这一点,我也没有遇到另一个子系统执行类似的事情。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)