Существует ли способ зеркально отразить выводы USB?

Подобные Unix системы "не вызывают функции путем выполнения новых процессов". Они (теперь) совместно использовали библиотеки как в значительной степени все другие относительно современные операционные системы.

Оболочки, с другой стороны, выполняют другие процессы, чтобы сделать определенные задачи. Но не все. У них есть сборка - в функциях, реализованных непосредственно в оболочке (или через общие библиотеки) для наиболее распространенных и простых задач (echo например, реализован как встроенное большим количеством оболочек).
(Окна cmd оболочка не отличается от оболочек Unix в этом отношении, BTW.)

Создание процесса в современных подобных Unix системах является, конечно, более дорогим, чем выполнение незавершенного вызова функции, но не таким огромным полем. Ядра оптимизированы для быстрого разветвления, использования методов как копия на записи для управления адресным пространством для ускорения "клонирования" процессов и совместного использования текста (код) страницы динамических библиотек.

Если каждый исполняемый файл на Вашей машине, которую можно было бы назвать из сценария оболочки, был реализован как общая библиотека, также:

  • запуск Вашей оболочки занял бы много времени (и память) только для загрузки всего этого впереди (даже с кэшированием, у динамического компоновщика есть нетривиальная работа, чтобы сделать, и библиотеки имеют разделы данных, не только текстовые разделы - мы говорим сотни если не тысячи библиотек здесь),
  • необходимо было бы загрузить каждую необходимую библиотеку, по запросу – возможно немного быстрее, чем запуск процесса, но преимущество здесь является действительно тонким. И часть данных Ваших общих библиотек становится действительно твердой справиться (глобальное состояние Вашей оболочки теперь зависит от состояния большого количества несвязанного кода и данных, загруженных в его адресном пространстве).

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

Другая вещь состоит в том, что отдельная модель процесса изолирует каждую задачу очень эффективно (принимающий управление виртуальной памятью и защиту). Во "все - библиотека" модель, ошибка в любой служебной библиотеке могла загрязнить (т.е. повреждение) всю оболочку. Ошибка в некоторой случайной утилите могла уничтожить Ваш процесс оболочки полностью.
Дело обстоит не так для мультимодели процесса, оболочка экранируется от того типа ошибки в программах, которые это запускает.

Что-то еще: ниже связь. Когда я смотрю на то, что находится в моем /usr/bin каталог прямо сейчас, я имею:

  • Исполняемые файлы ELF 64 битов,
  • Исполняемые файлы ELF 32 битов,
  • Сценарии Perl,
  • Сценарии оболочки (некоторые из тех запущенных программ Java),
  • Ruby пишет сценарий и
  • Python пишет сценарий

... и у меня, вероятно, нет самой необычной системы там. Вы просто не можете смешать первые два типа в том же процессе. Наличие интерпретатора, незавершенного для всех других просто, не практично.
Даже при рассмотрении только "собственного двоичного" формата файла имение интерфейса между "утилитами", являющимися простыми потоками и кодами выхода, делает вещи более простыми.
Единственные требования к утилитам состоят в том, чтобы реализовать ABI операционной системы и системные вызовы. Вы не получаете (почти) зависимости между различными утилитами. Это или чрезвычайно трудно, или невозможная плоскость, для незавершенного интерфейса, если Вы не налагаете вещи как "все, должен быть скомпилирован с версией X компилятора Y, с такой и такие флаги/настройки.

Существуют вещи, для которых незавершенные вызовы действительно делают большую производительность смысла мудрой, и они уже, очень часто, делаются, как создано-ins оболочками. Для остальных отдельная модель процессов работает очень эффективно, и ее гибкость является большим преимуществом.

12
08.05.2013, 14:14
2 ответа

Я не думаю, зеркально отражая интерфейс USB, самое простое решение Вашей проблемы.

Я не использовал brltty прежде; но, от того, что я понимаю, необходимо смочь использовать tmux для мультиплексирования терминала за пределами brltty в целом.

Честно говоря, я действительно не использовал tmux, также; но идя из этого учебного руководства...

  1. запустите tmux на своем основном терминале: tmux -S /tmp/shared
  2. позвольте другим пользователям соединяться с ведущим устройством: chmod +r /tmp/shared
  3. запустите tmux на своих клиентских терминалах: tmux -S /tmp/shared attach -r

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

exec /usr/bin/tmux -S /tmp/shared attach -r

2
27.01.2020, 19:56

Linux? Если да посмотрите мишень (2) или старое разветвление на выходе.

Но я пошел бы для старого классика

for (dev in devs)
    send (dev, command)
0
27.01.2020, 19:56

Теги

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