Пожалуйста, дайте мне знать, есть ли какой-либо API, системный вызов, функция (в Linux), которую я могу использовать в своей программе C для динамического обнаружения COM-порта, т. Е. Всякий раз, когда в порт вставлен USB-модем, я смогу обнаружить этот COM-порт, используя API, или системный вызов, или функцию в моей программе C.
Обнаружение COM-порта в Linux
Ответы (2)
В зависимости от вашего модема, устройство последовательного порта USB может отображаться как /dev/ttyUSBn
или /dev/ttyACMn
, где n
— это число, начинающееся с 0
.
Вы можете настроить правило udev
для автоматической реакции на вставку или извлечение устройства.
Если вы хотите сделать это самостоятельно на C, вам нужно использовать netlink(7)
сокетов. Если вы не хотите возиться с ними, вероятно, более простой подход — просто использовать утилиту udevadm
, предоставляемую пакетом udev (udevadm использует netlink
внутри), что-то вроде этого:
udevadm monitor --kernel
Если вы собираетесь использовать его в своей программе на C, просто вызовите его в канале следующим образом:
stdbuf -o0 udevadm monitor --kernel
и настройте цикл select
, чтобы он мог реагировать немедленно. Обертка в stdbuf
необходима, чтобы избежать буферизации, предоставляемой udevadm.
-o0
вместо -i0
.
- person HeyYO; 20.04.2016
В Linux последовательные порты не называются COMx. Они (настоящие последовательные порты) обычно называются /dev/ttySx
, где x — число, начиная с 0 для COM1, 1 для COM2 и т. д.
Если вам нужен список, вы должны найти в /dev
ttyS
устройств.
Вот очень подробная страница для программирования последовательного порта в Linux:
Наконец, обратите внимание, что быстрый поиск в Google имеет большое значение для такие общие вопросы!
mvp
ниже содержит более подробную информацию об этих динамически добавляемых последовательных портах.
- person Jonathon Reinhart; 03.04.2013