read()/ select()错误和可能的恢复

时间:2014-04-03 05:48:07

标签: linux usb embedded-linux device-node

我的嵌入式系统运行Linux操作系统。系统有两个通过USB连接的操纵杆。 我的程序在准备就绪时应该读取这两个设备中的任何一个并将操纵杆密钥信息传递给上层 我的程序执行以下操作。

  1. 如果操纵杆文件尚未打开,请打开操纵杆文件 / dev / js0 / dev / js1
    即如果fd0或fd1 == -1(默认值为-1)则打开它。
  2. select() // maxfd + 1并将readset传递给select
  3. 哪个设备准备就绪,程序使用 read()来读取数据。
  4. 上述所有三个步骤都是在计时器中定期完成的。
  5. 上面的代码工作正常。没问题。
    作为负面测试案例的一部分,我在打开并成功读取后从USB中移除了一个操纵杆。 我开始看到以下perror - > “read()失败:没有这样的文件或设备。

    我想处理这个错误,如果操纵杆被移除并插回,代码应该相应地重新打开它而没有任何问题。

    当我遇到上述错误时,我试图关闭设备并将我的fd设置为-1,这样作为步骤1的一部分,它将重新打开。但这不起作用。我正在调试它。我认为 close()在遇到没有此类文件或设备错误后无效。

    如果有人遇到此类问题或知道如何处理此类情况(打开USB设备后将其移除并插入),请提供您的输入。

    非常感谢。 问候, 艾默生

0 个答案:

没有答案