检测打开的文件/设备是否被replace/删除

在Linux下假设如下情况:

从USB串口转换器设备( /dev/ttyUSB0 )不断读取进程。 该设备突然拔下并重新插入(或由于某种原因而重置)。 该过程继续为/dev/ttyUSB0有一个有效的文件句柄,但不会从设备接收任何数据,除非进程重新打开设备(因为udev已经删除并重新创build设备节点)。

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

额外细节:

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

/dev是由udev控制的tmpfs

注意:我不想为此使用任何udev规则,而更喜欢直接在过程中实现的解决scheme。

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

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

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

只要在打开的文件描述符上调用fstat() ,在/dev/ttyUSB0调用stat() ,然后比较两个struct statst_ino字段。

让我知道,如果它真的有效。 🙂