5

假设Linux下的情况如下:

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

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

额外细节:

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

/dev是由tmpfs控制的udev

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

4

3 回答 3

1

如果 USB 设备被热拔出,设备上的操作将开始失败,并显示-EIO; 您可以检测到这一点并采取适当的措施。

于 2011-06-30T18:42:27.440 回答
1

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

只需调用fstat()您打开的文件描述符stat()on /dev/ttyUSB0,然后比较两个s的st_ino字段。struct stat

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

于 2011-06-30T18:56:37.623 回答
0

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

于 2011-06-30T18:15:41.297 回答