| PLUMBER(4) | PLUMBER(4)
| NAME
| plumber – file system for interprocess messaging
SYNOPSIS
| `plumber` [ `−p` plumbing ]
DESCRIPTION
| The plumber is a user-level file server that receives, examines, rewrites, and dispatches plumb(7) messages between programs. Its behavior is programmed by a plumbing file (default `$HOME/lib/plumbing`) in the format of plumb(7).
Its services are posted via 9pserve(4) as `plumb`. and consist of two pre-defined files, `plumb/send` and `plumb/rules`, and a set of output ports for dispatching messages to applications.
Programs use `fswrite` (see 9pclient(3)) to deliver messages to the `send` file, and fsread to receive them from the corresponding port. For example, sam(1)’s `plumb` menu item or the `B` command cause a message to be sent to `plumb/send`; `sam` in turn reads from, by convention, `plumb/edit` to receive messages about files to open.
A copy of each message is sent to each client that has the corresponding port open. If none has it open, and the rule has a `plumb client` or `plumb start` rule, that rule is applied. A `plumb client` rule causes the specified command to be run and the message to be held for delivery when the port is opened. A `plumb start` rule runs the command but discards the message. If neither `start` or `client` is specified and the port is not open, the message is discarded and a write error is returned to the sender.
The set of output ports is determined dynamically by the specification in the plumbing rules file: a port is created for each unique destination of a `plumb to` rule.
The set of rules currently active may be examined by reading the file `plumb/rules`; appending to this file adds new rules to the set, while creating it (opening it with `OTRUNC`) clears the rule set. Thus the rule set may be edited dynamically with a traditional text editor. However, ports are never deleted dynamically; if a new set of rules does not include a port that was defined in earlier rules, that port will still exist (although no new messages will be delivered there).
FILES
| `$HOME/lib/plumbing` default rules file `/usr/local/plan9/plumb`
| directory to search for files in `include` statements
`plumb` mount name for plumber(4).
SOURCE
| `/usr/local/plan9/src/cmd/plumb`
SEE ALSO
| plumb(1), plumb(3), plumb(7)