Пожалуйста, дайте мне знать, если есть какой-либо API, системный вызов, функция (в Linux), которую я могу использовать своей программой на C для динамического определения COM-порта, т. Е. Всякий раз, когда в порт вставлен USB-модемный ключ, я смогу обнаружить этот COM-порт, используя API, или системный вызов, или функцию в моей C-программе.
В зависимости от вашего модема, устройство с последовательным портом 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.
В Linux последовательные порты не называются COMx. Они (реальные последовательные порты) обычно называются /dev/ttySx
где x — это число, начинающееся с 0 для COM1, 1 для COM2 и т. д.
Если вы хотите список, вы должны посмотреть в /dev
за ttyS
устройства.
Вот очень подробная страница для программирования последовательного порта в Linux:
Наконец, обратите внимание, что быстрый поиск Гугл имеет большое значение для общих вопросов, как это!