det*_*tly 5 file-descriptors linux-kernel gpio ioctl
我正在围绕 libgpiod 的接口编写一些代码。比如我想设置一条线输出高电平。在底层,libgpiod 打开内核为该行提供的 fd,然后调用ioctl(fd, GPIO_V2_LINE_SET_VALUES_IOCTL, ...)
.
我的问题是:
这个特定的ioctl()
调用(带有GPIO_V2...
参数)理论上(可能)是否会像写入任意文件描述符一样阻塞?
ioctl()
理论上来说,呼叫通常会阻塞吗?例如,首先请求线路还涉及ioctl()
芯片的 on a fd。I2C 怎么样ioctl()
?
fd
如果它是阻塞的,那么行 struct ( ) 中的底层是否是line->fd_handle->fd
我需要在事件循环中等待的底层(例如,epoll()
或像 libuv 这样的抽象事件库)?
我试图通过研究来回答这个问题,但是(a)搜索“ioctl”和“blocking”的任何组合只会给出将fd设置为阻塞或不阻塞的结果,并且(b)它不在手册页或内核中我能找到的文档。
GPIO_V2_LINE_SET_VALUES_IOCTL
看起来足够安全;ioctl
它与 \xe2\x80\x9cmanipulat[ing] 特殊文件\xe2\x80\x9d 的底层设备参数的预期用途相匹配。它是在 中实现的linereq_set_values
,它获取锁,但我不认为锁可以无限期地阻塞(它的用户都是非阻塞的)。
从理论上讲,人们可能期望ioctl
s 是非阻塞的,因为它们主要用于配置驱动程序。然而,有些ioctl
s 的作用远不止于此:例如,FICLONERANGE
涉及FICLONE
实际的 I/O,更糟糕的是,它们受到某些网络文件系统(例如 NFS v4.2)的支持,因此可以想象它们会无限期地阻塞。
参见上面第 1 点。
\n 归档时间: |
|
查看次数: |
2991 次 |
最近记录: |