假设Linux下有以下情况:
一个进程正在不断地从 USB 串行转换器设备 (/dev/ttyUSB0
) 读取数据。该设备突然拔下并再次插入(或由于某种原因正在自行重置)。进程继续拥有 /dev/ttyUSB0
的有效文件句柄,但不会从设备接收任何数据,除非进程重新打开设备(因为 udev 有删除并重新创 build 备节点)。
是否有一种直接方法来检测这种情况(即不是通过检测数据流中的超时来间接检测),以便进程知道它必须重新打开设备?使用stat()
监视/dev/ttyUSB0
的修改时间是否可靠?
其他详细信息:
该进程使用标准的 open()
函数打开设备文件。
/dev
是由 udev
控制的 tmpfs
。
注意:我不想为此使用任何 udev 规则,更喜欢直接在流程中实现的解决方案。
最佳答案
如果 USB 设备被热拔出,设备上的操作将开始失败并显示 -EIO
;您可以检测到这一点并采取适当的措施。
关于linux - 检测打开的文件/设备是否已被替换/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539194/