Inferno OS Wiki
Advertisement

НАЗВАНИЕ

plumbing - правила маршрутизации сигналов протоколом plumber

ОПИСАНИЕ

Правила указывают протоколу plumber(8) маршруты, по которым нужно направить сигналы, сгенерированные приложениями с помощью сигнального модуля plumbmsg(2). Конфигурационный файл представляет из себя группы правил, разделенных пустыми строками. Каждое правило в отдельности - это набор шаблонов, содержащих инструкции, и команд plumb(1). Правила интерпретируются протоколом в порядке соответствия: применяется первое правило, шаблонам которогоудовлетворяют параметры полученного сигнала, сгенерированного каким-либо из запущенныхприложений, остальные правила даже не будут рассматриваться. Поэтому, если у вас в конфигурационном файле имеются лишние шаблоны их можно закомментировать знаком `#` в начале строки (каждой строке - один `#`). Поле аргументов внутри шаблона, содержащее целое выражение, заключается в ковычки-апострофы, например: '[a-zA-Z0-9]+\.m' (для данных, вида: fileFiLe11.m).

Все шаблоны имеют общую форму:

field verb arg

Каждое поле данных field соответствует такому же field во входящем сигнале (приложения генерят их с помощью plumbmsg(2), ведь протокол со всеми его модулями постоянно активен) и содержит набор специфических данных:

src - имя файла (исходника) приложения, сгенерировавшего сигнал
dst - порт назначения для построения маршрута
dir - рабочий каталог приложения
kind - формат передаваемых данных (например: text или image)
attr - последовательность пар атрибутов `name=value` (см. plumb(1))
data - поле данных (массив байтов)

Типы инструкций verb:

is - сравнить целиком со строкой, указанной в arg (построчно) //Exact string comparison with arg
matches - обычное сравнение с arg (побуквенное) //Regular expression comparison with arg
isdir - arg должен быть именем существующего каталога
isfile - arg должен быть именем существующего файла
set - присвоить field значение arg. Шаблон, содержащий такую инструкцию, обязательно разместите в конце правила, после других шаблонов (но перед plumb).

Параметр arg может ссылаться на одну из следующих переменных:

`$0 to $9` - Substrings resulting from the most recent regular expression match:`$0` - is the entire substring; `$1` - the first parenthesised substring, etc.
$file - последнее имя файла, которым оперировала инструкция isfile во время обработки правилом входящего сигнала
$dir - последнее имя каталога, которым оперировала инструкция isdir во время обработки правилом входящего сигнала

С полученными сигналами и их содержимым допускаются следующие действия:

plumb to port

Команда перенаправить сигнал в указанный порт (который по идее должен прослушиваться программой, которой и адресован сигнал).

plumb start command arg ...

Если указанный выше порт не прослушивается ни одной из программ, то исполнить командуcommand с параметрамиarg. При этом можно использовать значения переменных, начинающихся со знака`$`, которые были получены при проверке шаблонов правила на соответствие сигналу, и таким образом воспользоваться содержащейся в сигнале специфической информацией, подставив ее в командную строку в виде параметров. Естесственно, в командной строке переменные заменяются своими значениями.

plumb alwaysstart application


Инструкция alwaystart указывает протоколу на необходимость запуска только этого приложения для данных, удовлетворяющих правилу. //если не так, поправьте.

В завершение, рассмотрим пример: нижеприведенное правило отсылает имена модульных файлов (и находящихся в каталоге /module) - файлов с расширением `.m` - редактору файлов wm-brutus(1), запуская его, если он еще не был запущен:

kind is text

data matches '([a-zA-Z0-9]+\.m)(:[0-9]+)?'

data isfile /module/$1

data set /module/$0

plumb to edit

plumb start /dis/wm/brutus.dis $file$2

Использование $2, как аргумента команды start, позволяет передать редактору файлов brutus еще и номер строки в открываемом файле. Note plumbing

ФАЙЛ

/usr/user/lib/plumbing

Смотри также

plumb(1), plumbmsg(2), plumber(8)

Advertisement