Установить пропускную способность каналов в Linux

Насколько я понимаю, может быть две проблемы.

  1. Скрипт не имеет разрешений 777.
  2. То, как вы вызываете. Попробуйте, как показано ниже. Они должны работать.

Файл правил udev

$ cat 080-model-m.rules 
ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="1400", RUN+="/bin/sh /home/rob/home/scripts/caps-equals-super.sh"

ACTION=="remove", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="1400", RUN+="/bin/sh /home/rob/home/scripts/revert-keyboard-to-default.sh"

Обратите внимание на / bin / sh в начале RUN . Кроме того, еще раз проверьте путь к сценарию оболочки.

Также после внесения изменений в правила udev обязательно выполните триггер udevadm , чтобы правила udev были перезагружены

7
05.12.2016, 22:57
2 ответа

Основываясь на предложениях Дэниела и Стефана Чазеласа, я остановился на одном решении, которое я смог найти:

function hugepipe {
  perl -MFcntl -e 'fcntl(STDOUT, 1031, 1048576) or die $!; exec { $ARGV[0] } @ARGV or die $!' "$@"
}

Это позволяет сделать:

hugepipe <command> | <command>

и канал между двумя командами будет иметь емкость, указанную через fcntl в сценарии perl.

2
27.01.2020, 20:19

записи через пропускную способность канала по умолчанию все равно потребуют пробуждения команды нисходящего потока

Если ваша цель не состоит в том, чтобы слишком часто активировать команду нисходящего потока, сделал вы пытаетесь использовать параметр -p для буфера ? Это должно заставить буфер удерживать записи до тех пор, пока буфер не будет заполнен до определенного процента. Вам также может понадобиться опция -s для записи больших блоков.

Обновление: О, трубы между командами все еще ограничивают возможности. Возможно, попробуйте использовать следующую программу-адаптер:

#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char** argv)
{
  fcntl(atoi(argv[1]), F_SETPIPE_SZ, atoi(argv[2]));
  execvp(argv[3],argv+3);
  while (1);
}

как в:

adapter 1 (BIGSIZE) cmd1 | cmd2

или даже:

adapter 1 (BIGSIZE) cmd1 | adapter 1 (BIGSIZE) buffer [args] | cmd2

, если cmd1 по-прежнему выполняет небольшие записи.

4
27.01.2020, 20:19

Теги

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