检测是否已更换/删除打开的文件/设备

时间:2011-06-30 18:11:01

标签: linux filesystems monitoring udev usbserial

在Linux下假设以下情况:

进程持续从USB串行转换器设备(/dev/ttyUSB0)读取。该设备突然拔掉并再次插入(或由于某种原因重置自身)。该过程继续为/dev/ttyUSB0提供有效的文件句柄,但不会从设备接收任何数据,除非该过程重新打开设备(因为 udev 已删除并重新创建设备节点)。

是否有直接方法来检测这种情况(即通过检测数据流中的超时间接),以便进程知道它必须重新打开设备?使用/dev/ttyUSB0监控stat()的修改时间是否可靠?

其他详情:

该过程使用标准open()函数打开设备文件。

/dev是由tmpfs控制的udev

注意:想要使用任何 udev 规则并且更喜欢在此过程中直接实施的解决方案。

3 个答案:

答案 0 :(得分:1)

如果USB设备被热插拔,设备上的操作将以-EIO开始失败;你可以检测到这一点并采取适当的行动。

答案 1 :(得分:1)

如果设备节点实际被删除并重新创建(我相信如果你有udev),那么你应该能够使用inode号来判断这种情况何时发生。

只需在fstat()上的打开文件描述符stat()上调用/dev/ttyUSB0,然后比较两个st_ino的{​​{1}}字段。

让我知道它是否真的有效。 : - )

答案 2 :(得分:0)

我认为FAMgamin会检测到这些事件。