LINUX.ORG.RU

Сообщения Trame

 

Есть ли возможность управлять из одного процесса вводом для других процессов?

Форум — Development

Мне захотелось решить задачу в одной игре шутере (Arena Breakout), которая заключаеться в том чтобы максимально быстро беззвучно передвигаться. Для этого там нужно войти в режим тихой ходьбы и двигаться с прерываниями. Если просто зажать кнопку ходьбы, то всё равно будет издаваться минимальный звук. Так вот мне захотелось передвигаться беззвучно на зажатие сочетание клавиш ctrl+w/a/s/d (То есть я хочу чтобы при зажатии клавишь ctrl+w/a/s/d игра думала что я циклично зажимаю w/a/s/d на 0,1 секунду, затем отпускаю w/a/s/d на 0,1 секунду). Я думаю будет не сложно найти библиотеки которые регистрирует сочетания клавиш на фоне и эмулируют частые нажатия клавишь направлений ходьбы. Но проблема в том, что игра тоже зарегистрирует зажатие клавиш ctrl и w/a/s/d, а зажатие клавиш в игре это непрерывная ходьба, а мне надо как раз таки делать перерывы. Переназначать клавиши ходьбы для реализации логики фоновой программы мне не хотелось бы, потому что так не удобно играть. Мне бы хотелось чтоб моя фоновая программа просто делала «невидимыми» зажатия клавишь w/a/s/d при условии, что так же зажат ctrl, а затем эмулировала преривыстые нажатия w/a/s/d для игры. И тут не просто стоит задача спрятать какие-то нажатия от игры, но и спрятать сэмулированные прерывистые нажатия для самой фоновой программы чтоб её алгоритм не выполнялся снова. Так вот, расскажите, есть ли решение такой задачи? Где искать информацию об этом? Может нужен другой подход к решению, другая архетектура? Может для этого надо патчить драйвер клавиатуры или само ядро, потому что linux таких возможностей не предоставляет?

Мне известно что вышеуказанная игра недоступна под linux, но я просто привёл пример, хочу узнать как в linux решить такую задачу и решаема ли она вообще, чтобы легче было искать решение под виндой

 

Trame
()

Каковы характеристики взаимодействия с stdout дочернего процесса?

Форум — Development

Предистория

У меня возникла потребность писать скрипты не на таких скриптовых языках как bash, потому что мне не нравилась не полнота возможностей и подводные камни в нём, вместе со сложной документацией. Я начал искать альтернативы, нашёл nushell, избавление от подводных камней обеспечилась, потому что это современная оболочка, но не полнота возможностей, и незадокументировать некоторых вещей может приводить к неожиданностям. Потом до меня дошло что можно использовать любой язык программирования, всё что мне нужно это библиотека для вызова дочерних процессов, для меня это казалось магией, которой обладают лишь командные оболочки. Ну я выбрал rust, там как раз ещё и с оффициальной документаций всё в порядке. Но потом я выбрал node.js, потому что там прототипы, и мне кажеться это очень гибко, и не надо с типами шаманить. Меня на node перенял zig с его гибкой системой типов. Но zig нестабилен, поэтому пока оверхедные но доступные альтернативы, по типу node, может есть лучше, но я не нашёл

Суть вопроса

Я знаю что есть различные методы ipc. Я так понимаю stdout особо не считается за ipc, потому что stdout/stdin это просто файлы. Так вот мне интересно, можно ли организовать нормальное «одностороннее» ipc. Под односторонним я понимаю изменения в коде только родительского процесса. А дочерний лишь иногда пишет в stdout и через некоторое время завершается. Под нормальным я подразумеваю производительное. Ну то есть, если я правильно понял, stdout это файлы, а значит там идёт оверхед от записи и чтения с диска?
А ещё меня интересует как получать оповещение для родительского процесса, когда дочерний что-то написал в stdout. Просто в стандартной библиотеке rust можно читать из stdout только когда процесс завершен, а я например видел, что есть же такие процессы, как архиваторы, и они на протяжении своей работы выводят прогресс выполненной операции. Когда я спросил про это, мне порекомендовали крейт mio, там я познакомился с epoll, это такая штука, которая позволяет получать от ОС оповещение когда в stdout, то есть в файл, была произведена запись и можно читать новые данные
Когда я спросил как работает в Node.js child.stdout.on("data", ... и какой метод оповещения используется в случае с stdout, мне сказали что я дурак и вообще спрашиваю какую-то чушь. Я ведь знаю что кроме epoll есть poll, select. А на windows и mac os ещё другие методы, ведь это платформозависимая вещь.

 ,

Trame
()

RSS подписка на новые темы