我的嵌入式系统运行 Linux 操作系统。该系统有两个通过 USB 连接的操纵杆。我的程序应该在这两个设备准备好时读取它们中的任何一个,并将操纵杆键信息传递给上层。
我的程序执行以下操作。
- 如果游戏杆文件/dev/js0和/dev/js1尚未打开,则打开它们。
即如果 fd0 或 fd1 == -1(默认值为 -1)打开它。 - select() // maxfd+1 和 readset 被传递给 select
- 无论哪个设备准备就绪,程序都会使用read()来读取数据。
- 上述所有三个步骤都在计时器中定期完成。
上面的代码工作正常。没有问题。
作为负面测试案例的一部分,我在打开并成功读取 USB 后从 USB 中移除了一个操纵杆。我开始看到以下 perror ->“read() failed: no such file or device.
我想处理这个错误,这样如果操纵杆被移除并重新插入,代码应该相应地重新打开它而不会出现任何问题。
一旦遇到上述错误,我就尝试关闭设备并将我的 fd 设置为 -1,以便在步骤 1 中重新打开它。但这不起作用。我目前正在调试它。我认为close()在没有遇到此类文件或设备错误后无法正常工作。
如果有人遇到过此类问题或知道如何处理此类情况(USB 设备在打开后移除并插入),请提供您的意见。
非常感谢。问候, 艾默生