mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
b0aecb4ba5
In MacOS, services run by launchd must run in the foreground, since launchd manages forking and other resources.
128 lines
2.6 KiB
Groff
128 lines
2.6 KiB
Groff
.TH PLUMBER 4
|
|
.SH NAME
|
|
plumber \- file system for interprocess messaging
|
|
.SH SYNOPSIS
|
|
.B plumber
|
|
[
|
|
.B -f
|
|
]
|
|
[
|
|
.B -p
|
|
.I plumbing
|
|
]
|
|
.SH DESCRIPTION
|
|
The
|
|
.I plumber
|
|
is a user-level file server that receives, examines, rewrites, and dispatches
|
|
.IR plumb (7)
|
|
messages between programs.
|
|
Its behavior is programmed by a
|
|
.I plumbing
|
|
file (default
|
|
.BR $HOME/lib/plumbing )
|
|
in the format of
|
|
.IR plumb (7).
|
|
.PP
|
|
Its services are posted via
|
|
.IR 9pserve (4)
|
|
as
|
|
.BR plumb ,
|
|
and consist of two
|
|
pre-defined files,
|
|
.B plumb/send
|
|
and
|
|
.BR plumb/rules ,
|
|
and a set of output
|
|
.I ports
|
|
for dispatching messages to applications.
|
|
.PP
|
|
Programs use
|
|
.B fswrite
|
|
(see
|
|
.IR 9pclient (3))
|
|
to deliver messages to the
|
|
.B send
|
|
file, and
|
|
.I fsread
|
|
to receive them from the corresponding port.
|
|
For example,
|
|
.IR sam (1)'s
|
|
.B plumb
|
|
menu item or the
|
|
.B B
|
|
command cause a message to be sent to
|
|
.BR plumb/send ;
|
|
.B sam
|
|
in turn reads from, by convention,
|
|
.B plumb/edit
|
|
to receive messages about files to open.
|
|
.PP
|
|
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
|
|
.B plumb
|
|
.B client
|
|
or
|
|
.B plumb
|
|
.B start
|
|
rule, that rule is applied.
|
|
A
|
|
.B plumb
|
|
.B client
|
|
rule causes the specified command to be run
|
|
and the message to be held for delivery when the port is opened.
|
|
A
|
|
.B plumb
|
|
.B start
|
|
rule runs the command but discards the message.
|
|
If neither
|
|
.B start
|
|
or
|
|
.B client
|
|
is specified and the port is not open,
|
|
the message is discarded and a write error is returned to the sender.
|
|
.PP
|
|
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
|
|
.B plumb
|
|
.B to
|
|
rule.
|
|
.PP
|
|
The set of rules currently active may be examined by reading the file
|
|
.BR plumb/rules ;
|
|
appending to this file adds new rules to the set, while
|
|
creating it (opening it with
|
|
.BR 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).
|
|
.PP
|
|
The
|
|
.B -f
|
|
option causes the process to run in the foreground.
|
|
.SH FILES
|
|
.TF $HOME/lib/plumbing
|
|
.TP
|
|
.B $HOME/lib/plumbing
|
|
default rules file
|
|
.TP
|
|
.B \*9/plumb
|
|
directory to search for files in
|
|
.B include
|
|
statements
|
|
.TP
|
|
.B plumb
|
|
mount name for
|
|
.IR plumber (4).
|
|
.SH SOURCE
|
|
.B \*9/src/cmd/plumb
|
|
.SH "SEE ALSO"
|
|
.IR plumb (1),
|
|
.IR plumb (3),
|
|
.IR plumb (7)
|
|
.\" .SH BUGS
|
|
.\" .IR Plumber 's
|
|
.\" file name space is fixed, so it is difficult to plumb
|
|
.\" messages that involve files in newly mounted services.
|