7

Поскольку невозможно напрямую разделить последовательный порт между двумя процессами, использующими Linux, я ищу другой способ добиться этого, я слышал о socat, но не смог найти конкретный пример того, как реализовать следующее:

Разделите один физический последовательный порт (/dev/ttyUSB0) на два виртуальных порта, один для чтения и один для записи, поскольку одному процессу требуется только отправка данных, а одному - только получение данных.

Я не могу изменить отправку заявки, к сожалению.

1 ответ1

4

В Linux всегда было проблемой получить эксклюзивный доступ к последовательным портам, поскольку единственный способ ограничить нежелательные помехи - это права доступа пользователя / группы.

Со временем было установлено соглашение о том, как указывать другим процессам не открывать устройство последовательного порта, когда какой-либо процесс желает «владеть» им: процесс, который собирается открыть последовательный (параллельный) порт, сначала проверяет файл блокировки в каталог /tmp (другие стандарты могут использовать каталог /var/lock ), например /tmp/LCK..ttyS0 для устройства ttyS0 и записывает свой PID в этот файл. Затем он читает его обратно, и если PID совпадает, то процесс становится владельцем порта. После того, как порт больше не нужен, процесс блокировки удаляет файл блокировки.

Таким образом, вы можете открыть его из разных процессов при условии, что эти процессы имеют доступ к устройству.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .