Я пытаюсь создать виртуальный локальный com-порт, который перенаправляет все на удаленный компьютер через TCP с помощью этой команды:

sudo socat GOPEN:/dev/ptyp0,ignoreeof TCP:192.168.254.106:8080
2018/09/08 21:48:51 socat[10860] E open("/dev/ptyp0", 012, 0666): Resource temporarily unavailable

Это недавно установленная OS X High Sierra, поэтому я сомневаюсь, что у меня нет ресурсов.

sudo lsof /dev/ptyp0

Ничего не показывает ... и я получаю тот же результат, даже если я пытаюсь ptyp1, ptyp2 и т.д.

1 ответ1

1

Вы не можете просто открыть случайный pty и ожидать, что он сработает. ( На самом деле, вы должны открыть каждый из них , в свою очередь, пока вы не найдете тот , который свободен) Вместо того, чтобы использовать правильный синтаксис socat для него:

socat PTY,link=/tmp/mytty TCP:192.168.254.106:8080

Это откроет главную сторону доступного псевдотерминала, создаст символическую ссылку в /tmp/mytty (измените соответственно) на подчиненную сторону и переместится между главной стороной и вашим удаленным портом TCP.

Теперь вы можете использовать /tmp/mytty (или связанный с ним slave-pty) как обычный tty. («Виртуальный локальный com-порт» звучит подозрительно, как термин Windows).

Кстати, это будет работать на всех платформах, которые поддерживают псевдо-терминалы, потому что socat использует соответствующий платформе метод.

редактировать

То, что вы видите в качестве опции в программе Java, которую вы запускаете, полностью зависит от программы Java, которую вы запускаете, о которой я ничего не знаю (и вы нам ничего не сказали). Вполне возможно, что в Java-программе есть дополнительные опции, чтобы рассказать о других tty. Также возможно, что у него нет таких опций.

Файлы в /dev являются частью специальной файловой системы devfs которая показывает устройства, доступные ядру. По-видимому, вы не можете создавать символические ссылки на него.

Так что, если все, что делает ваша Java-программа, это сканирует файлы /dev/cu.* , то вам не повезло.

Вы всегда можете попытаться найти исходный код своей Java-программы и изменить его. Или даже исправьте двоичный файл (замените строку /dev/cu чем-то другим).

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