Откройте / dev / ttyUSB *, когда он станет настоящим - PullRequest
0 голосов
/ 23 июня 2011

У меня есть программа, которая всегда будет работать, когда компьютер включен.Он взаимодействует с последовательным через USB-устройство.Иногда устройство может отсутствовать, когда компьютер включен.

Мой вопрос - хороший способ подтвердить наличие файла устройства.Я мог бы сделать бесконечный цикл, который бы непрерывно проверял файл, предполагая, что я знаю, какое у него будет имя, а затем разрывается, когда он получает fd.Но есть ли лучший способ, чем этот?

Кроме того, при условии, что устройство отключается во время работы программы, мой fd теперь становится недействительным.Возникает ли какое-либо событие или ошибка, когда это происходит, поэтому я снова могу начинать проверку, пока файл устройства снова не появится?

Я читаю с fd с помощью цикла выбора.

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

В Linux ваше приложение может быть уведомлено, когда устройство подключено или удалено с помощью udev.

Для хорошего примера взгляните на это уведомление: udev-notify

API libudev позволит вам прослушивать события ядра иполучать уведомления, когда устройство доступно или когда его удаляют, а затем вы можете решить, когда произойдут такие события.

0 голосов
/ 23 июня 2011

Исторически, решение опроса (цикл, который определяет, существует ли указанный «файл» через некоторый интервал), было бы «лучшим».Если вы используете современный Linux (2.6.12+, но вы не указали), вы можете использовать inotify , который, вероятно, делает именно то, что вам нужно - отслеживать каталог для создания файла (IN_CREATE)).Статья в Википедии, на которую я ссылался, дает очень хороший обзор и полезные ссылки.

Часть, где она отключается, довольно сложна.Когда файл удаляется в * nix (с давних времен), его файловые дескрипторы остаются в силе.Поэтому я бы предположил, что extern int errno; может быть вашим решением;ваш пост был помечен буквой "C", так что нечего "выбрасывать", но если вы проверите это, когда ваш read (или любой другой) вызов не удался, вы можете получить понимание.

Также проверьте libudev, которыйконечно, более специфичен для устройств, нежели общая философия «все - файл» * nix.

...