如何在常规文件上生成POLLPRI事件?

2024-04-29 04:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

{{cdfs}和{cdfs}一起工作时,{cdfs}和

这很简单:

poll = select.poll()
poll.register(filename, select.POLLPRI | select.POLLERR)
result = poll.poll(timeout=timeout)

但是,我想为这段代码编写测试,并为依赖它的应用程序编写模拟测试。所以,我需要能够引起POLLPRI事件。在

我尝试过使用Unix域套接字,但是在域套接字连接之后,我无法打开文件进行读取(errno 6,没有这样的设备)。我还尝试使用带有SOCK_DGRAM的套接字,但如果文件尚未创建,则无法找到该文件,或者导致连接被拒绝。在

我想要一种方法来打开一个常规文件,或者创建一个可以像普通文件一样打开的文件,并且能够向它发送一个被视为“紧急数据”的消息流。即MSG_OOB。在

我能做什么?在


Tags: 文件代码register应用程序timeout事件unixresult
1条回答
网友
1楼 · 发布于 2024-04-29 04:27:40

似乎可以通过轮询procfs中公开的sysctl来实现这一点。如果您查看poll implementation in procfs for the ^{} subdirectory,您将看到任何实现轮询通知的sysctl都将返回一个包含POLLERR|POLLPRI的掩码。那么我们如何找出是什么sysctl实现了这一点呢?我们寻找proc_sys_poll_notify的用法!在

其中一个这样的位置在^{},它在/proc/sys/kernel下实现了许多sysctl。其中大多数是只读的,但是hostname和{}可以编写(另请参见它们的table entries)。在

当然,这需要root权限才能写入,例如/proc/sys/kernel/hostname。在

这可能是在一个合成文件系统实现中完成这一任务的最简单方法。当然,测试代码的唯一方法是poll(2)你的一个引脚,按下按钮,看看你的上升/下降信号是否中断。在

注意:sysfs also does this for edge nodes in the tree

>>> import select
>>> f = open('/sys/bus/clockevents/devices/clockevent0/uevent', 'r')
>>> p = select.poll()
>>> p.register(f, select.POLLPRI | select.POLLERR)
>>> result = p.poll(10)
>>> result
[(3, 10)]

10当然是POLLPRI (0x2) | POLLERR (0x8)。我使用/sys/power/state作为输入得到相同的结果。基本上,如果在sysfs中轮询任何用户可读的非目录文件条目,您将得到POLLPRI | POLLERR。在

相关问题 更多 >