Виртуальный последовательный порт для Linux

В дополнение к @assylias answer вы также можете использовать новый поток api, если вы используете Java 8:

List l = Arrays.asList(4, 5, 6);

static boolean condition(Integer i) {
    return i == 5;
}

static Predicate predicate = YourClassName::condition;

l.stream()
    .filter(predicate.negate())
    .forEach(System.out::println);

Если вы инвертируете условие, решение становится еще более кратким, поскольку вам не нужно negate() предикат, что позволяет использовать только ссылку на метод:

List l = Arrays.asList(4, 5, 6);

static boolean condition(Integer i) {
    return i != 5;    // <-- condition has been negated
}

l.stream()
    .filter(YourClassName::condition)
    .forEach(System.out::println);

Один из красотой этого является то, что поток лениво оценивается, т. е. операция filter() фактически не оценивается до тех пор, пока она не будет использована терминальной операцией, такой как forEach(). Подробнее об этом можно найти в учебнике для Oracle .

111
задан Kara 18 April 2017 в 21:21
поделиться

4 ответа

Можно использовать имущество ("псевдотелетайп", где последовательный порт является "реальным телетайпом") для этого. От одного конца откройте /dev/ptyp5, и затем присоедините свою программу к /dev/ttyp5; ttyp5 будет действовать точно так же, как последовательный порт, но отправит/получит все, что он делает через/dev/ptyp5.

при реальной необходимости в нем, чтобы говорить с файлом, названным /dev/ttys2, тогда просто переместите старое /dev/ttys2 из пути и сделайте символьную ссылку от ptyp5 до ttys2.

, Конечно, можно использовать некоторое число кроме ptyp5. Возможно, выберите один с высоким количеством для предотвращения дубликатов, так как все терминалы входа в систему будут также использовать имущества.

Википедия имеет больше об имуществах: http://en.wikipedia.org/wiki/Pseudo_terminal

72
ответ дан Nikola K. 24 November 2019 в 02:58
поделиться

Можно хотеть посмотреть Tibbo VSPDL для создания виртуального последовательного порта Linux с помощью Драйвера ядра - это кажется довольно новым, и доступно для скачивания прямо сейчас (бета-версия). Не уверенный в лицензии в этой точке, или хотят ли они сделать его доступным коммерчески только в будущем.

существуют другие коммерческие альтернативы, такой как http://www.ttyredirector.com/ .

В Открытом исходном коде, Remserial (GPL) может также сделать то, что Вы хотите, с помощью ИМУЩЕСТВА Unix. Это передает последовательные данные в "необработанной форме" к сетевому сокету; подобная STTY установка терминальных параметров должна быть сделана, когда созданию порта, изменению их позже нравится описанный в RFC 2217, кажется, не поддерживается. Необходимо быть в состоянии выполнить два remserial экземпляра для создания виртуального нуль-модема как com0com, за исключением того, что необходимо будет настроить скорость порта и т.д. заранее.

Socat (также GPL) похож на расширенный вариант Remserial еще с многими опциями, включая метод "ИМУЩЕСТВА" для перенаправления ИМУЩЕСТВА к чему-то еще, которое может быть другим экземпляром Socat. Для Единицы tets, socat, вероятно, более хорош, чем remserial, потому что Вы можете непосредственно файлы кошки в ИМУЩЕСТВО. Посмотрите пример ИМУЩЕСТВА на странице справочника. патч существует под "contrib" для оказания поддержки RFC2217 для согласования настроек последовательной линии.

8
ответ дан 24 November 2019 в 02:58
поделиться

Вы были бы в состоянии использовать USB-> адаптер RS232? У меня есть некоторые, и они просто используют драйвер FTDI. Затем необходимо быть в состоянии переименовать/dev/ttyUSB0 (или независимо от того, что создается) как/dev/ttyS2.

4
ответ дан Howler 24 November 2019 в 02:58
поделиться

Я могу думать о трех опциях:

Реализация RFC 2217

RFC 2217 покрывает COM-порт к стандарту TCP/IP, который позволяет клиенту в одной системе эмулировать последовательный порт к локальным программам при прозрачной отправке и получении сигналов данных и сигналов управления к серверу в другой системе, которая на самом деле имеет последовательный порт. Вот общий обзор .

то, Что Вы сделали бы, является находкой, или реализуйте клиентский драйвер COM-порта, который реализовал бы сторону клиента системы на Вашем ПК - кажущийся быть реальным последовательным портом, но в действительности доставляющий все в челноке к серверу. Вы могли бы быть в состоянии получить этот драйвер бесплатно от Digi, Lantronix, и т.д. в поддержку их реальных автономных серверов последовательного порта.

Вы тогда реализовали бы сторону сервера соединения локально в другой программе - разрешение клиенту соединиться и издание данных и команд управления по мере необходимости.

Это, вероятно, не тривиально, но RFC там, и Вы могли бы быть в состоянии найти проект с открытым исходным кодом, который реализует одну или обе стороны соединения.

поочередно Изменяют драйвер

последовательного порта Linux, источник драйвера последовательного порта для Linux легко доступен. Возьмите это, разрушьте аппаратные части управления и имейте тот один драйвер, выполненный два/dev/ttySx порта как простая обратная петля. Тогда подключите свою реальную программу к ttyS2 и свое средство моделирования к другому ttySx.

Использование два USB<-> Последовательные кабели в обратной петле

, Но самая легкая вещь сделать прямо сейчас? Потратьте 40$ на два USB-устройства последовательного порта, соедините их проводом вместе (нуль-модем) и на самом деле имейте два реальных последовательных порта - один для программы, которую Вы тестируете, один для Вашего средства моделирования.

-Adam

3
ответ дан Adam Davis 24 November 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: