Обнаружение COM-порта в Linux

Пожалуйста, дайте мне знать, если есть какой-либо API, системный вызов, функция (в Linux), которую я могу использовать своей программой на C для динамического определения COM-порта, т. Е. Всякий раз, когда в порт вставлен USB-модемный ключ, я смогу обнаружить этот COM-порт, используя API, или системный вызов, или функцию в моей C-программе.

1

Решение

В зависимости от вашего модема, устройство с последовательным портом USB может отображаться как /dev/ttyUSBn или же /dev/ttyACMn, где n какое-то число, начиная с 0,

Вы можете настроить udev Правило автоматического реагирования на устройство вставлено или удалено.

Если вы хотите сделать это самостоятельно в C, вам нужно использовать netlink(7) Розетки. Если вы не хотите возиться с ними, возможно, проще будет просто использовать утилиту udevadm предоставляется пакетом udev (используется udevadm netlink внутренне), как то так:

 udevadm monitor --kernel

Если вы собираетесь использовать его в своей C-программе, просто вызовите его в pipe следующим образом:

 stdbuf -o0 udevadm monitor --kernel

и настройка select петля, чтобы он мог реагировать сразу. Заворачивать в stdbuf необходимо избегать буферизации, предоставляемой udevadm.

7

Другие решения

В Linux последовательные порты не называются COMx. Они (реальные последовательные порты) обычно называются /dev/ttySx где x — это число, начинающееся с 0 для COM1, 1 для COM2 и т. д.

Если вы хотите список, вы должны посмотреть в /dev за ttyS устройства.

Вот очень подробная страница для программирования последовательного порта в Linux:

Наконец, обратите внимание, что быстрый поиск Гугл имеет большое значение для общих вопросов, как это!

4

По вопросам рекламы [email protected]