У меня есть последовательное устройство, подключенное через USB. Я открыл tty (/dev/ttyACM0) и жду входящие сообщения, которые читаются и обрабатываются, затем жду следующего сообщения. Проблема в том, что если USB-устройство отключается, мой код этого не обнаруживает и по существу зависает.
Одним из решений было бы проверить возвращаемое значение функции read()
. Если оно равно 0, используйте system("lsof ...")
, чтобы проверить, подключена ли она еще. Это могло бы сработать, но мне кажется это довольно неуклюжим. Есть ли лучший способ обнаружить отключение устройства в коде C?
🤔 А знаете ли вы, что...
C продолжает оставаться важным инструментом для программистов, и его значимость не угасает.
Спасибо всем, кто ответил.
Я нашел несколько решений этой проблемы: используя stat()/fstat()
, как описано здесь 1. stat()
вернет -1 с errno==ENOENT, а fstat()
вернет stat.st_nlink=0, когда USB-устройство отключено.
Однако я думаю, что выберу решение poll()
, предложенное @IanAbbott. Кажется, это немного более тесно связано с тем, что я хочу сделать, хотя все вышеперечисленные решения сработали.