Доступ к аппаратному порту ПК с Java в Linux

Что такое Java-on-Linux, эквивалентный функциям ввода/вывода аппаратного порта ПК-архитектуры размером C?

Для вывода есть outb как в этом:

tmp = inb(0x61);
if (tmp != (tmp | 0x01)) 
    outb(0x61, tmp | 0x01);

Для ввода есть inb как в этом:

tmp = (inb(0x61) & 0xfe);
outb(0x61, tmp);

Цель: я хочу реализовать что-то, что накладывает меньше накладных расходов, чем это:

try { Runtime.getRuntime().exec("beep") } catch (IOException e) {}

в качестве альтернативы отправке кода 7 (символ звонка) на стандартный вывод, потому что это, похоже, агрессивно отключено в Ubuntu. Звуковой сигнал Toolkit также отключен.


person H2ONaCl    schedule 19.01.2012    source источник
comment
В Linux все файловое.   -  person Kangkan    schedule 19.01.2012
comment
Вы можете запустить C в Linux (очевидно), так что это доказывает, что не весь ввод-вывод Linux ориентирован на файлы.   -  person H2ONaCl    schedule 19.01.2012
comment
Нет! Kangkan предлагает вам открыть какой-нибудь файл устройства, например, /dev/tty0 или /dev/lp0. См. также stackoverflow.com/a/8923009/841108 и easysw.com/~mike/serial   -  person Basile Starynkevitch    schedule 19.01.2012
comment
Если вам нужна именно такая функциональность, используйте jni — напишите небольшую функцию C, встройте ее в разделяемую библиотеку, загрузите и вызовите ее.   -  person Chris Stratton    schedule 23.05.2014


Ответы (1)


Я думаю, ты лаешь не на тот поезд.

Java — это объектно-ориентированный язык высокого уровня, компилируемый в архитектуру виртуальной машины. Инструкции ввода-вывода на ассемблере зависят от аппаратного процессора. Между ними нет прямой эквивалентности.

Лучшее, на что вы можете надеяться, — это связать ваш код Java (используя конвейеры, общую память, сокеты и т. д.) с родным приложением Linux, которое выполняет требуемый ввод-вывод.

person adelphus    schedule 19.01.2012
comment
Обновление: моя цель была описана. - person H2ONaCl; 19.01.2012
comment
Итак, ваш реальный вопрос: как мне создать системный звуковой сигнал из Java? Это кажется принципиально другим вопросом для доступа к аппаратному порту ПК с Java в Linux. - person adelphus; 19.01.2012
comment
Тем не менее I/O то, что мне нужно, потому что это была огромная трата времени, пытаясь сделать звуки любым другим способом. А я пробовал многие. Пример кода не на ассемблере: это независимый от процессора код. - person H2ONaCl; 19.01.2012
comment
Все, что связано с inb()/outb(), НЕ зависит от процессора. Операции ввода-вывода уникальны для x86. - person myron-semack; 16.02.2012
comment
Существуют компиляторы C, которые не являются x86, поэтому должны быть inb() и outb(), которые не являются x86. - person H2ONaCl; 31.03.2012
comment
@broiyan inb() и outb() — это функции, зависящие от платформы. Их нигде нет в библиотеках ANSI C. На самом деле, у большинства процессоров, отличных от x86, нет даже пространства для ввода-вывода (они все делают с отображением памяти). - person myron-semack; 31.07.2012
comment
Этот ответ бесполезен, так как он написан из ошибочного предположения, что, поскольку java может быть нейтральной для платформы, он будет использоваться только таким образом. И нет, взаимодействие с отдельным процессом не является обязательным требованием — как почти любой другой практический язык, java позволяет вызывать функции, написанные на других языках. - person Chris Stratton; 23.05.2014