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, exam-
ines, 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 con-
sist of two pre-defined files, plumb/send and plumb/rules,
and a set of output ports for dispatching messages to appli-
cations.
Programs use fswrite (see 9pclient(3)) to deliver messages
to the send file, and fsread to receive them from the corre-
sponding 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 mes-
sages 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 speci-
fied 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 dynam-
ically 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
Page 1 Plan 9 (printed 10/29/25)
PLUMBER(4) PLUMBER(4)
/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)
Page 2 Plan 9 (printed 10/29/25)