Plumber (program)

This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help to improve this article by introducing more precise citations. (August 2015) (Learn how and when to remove this template message)

|

This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources.
Find sources: "Plumber" program – news · newspapers · books · scholar · JSTOR (August 2015) (Learn how and when to remove this template message)

|

The plumber, in the Plan 9 from Bell Labs and Inferno operating systems, is a mechanism for reliable uni\- or multicast inter-process communication of formatted textual messages. It uses the Plan 9 network file protocol, 9P, rather than a special-purpose IPC mechanism.

Any number of clients may listen on a named port (a file) for messages. Ports and port routing are defined by plumbing rules. These rules are dynamic. Each listening program receives a copy of matching messages. For example, if the data /sys/lib/plumb/basic is plumbed with the standard rules, it is sent to the edit port. The port will write a copy of the message to each listener. In this case, all running editors will interpret this message as a file name, and open the file.

The plumber is the 9P file server that provides this service. Clients may use libplumb to format messages. Since the messages are 9P, they are network transparent.

## Example[edit]

The following is an example of plumbing rules:

# these are generally in order from most specific to least,
# since first rule that fires wins.
addr=':(#?[0−9]+)'
protocol='(https?|ftp|file|gopher|mailto|news|nntp|telnet|wais)'
domain='[a−zA−Z0−9_@]+([.:][a−zA−Z0−9_@]+)*/?[a−zA−Z0−9_?,%#~&/\−]+'
file='([:.][a−zA−Z0−9_?,%#~&/\−]+)*'
# image files go to page
type is text
data matches '[a−zA−Z0−9_\−./]+'
data matches '([a−zA−Z0−9_\−./]+).(jpe?g|gif|bit)'
arg isfile $0
plumb to image
plumb start page −w $file
# URLs go to web browser
type is text
data matches $protocol://$domain$file
plumb to web
plumb start window webbrowser $0
# existing files, possibly tagged by line number, go to edit/sam
type is text
data matches '([.a−zA−Z0−9_/–]+[a−zA−Z0−9_/\−])('$addr')?'
arg isfile $1
data set $file
attr add addr=$3
plumb to edit
plumb start window sam $file
# .h files are looked up in /sys/include and passed to edit/sam
type is text
data matches '([a−zA−Z0−9]+\.h)('$addr')?'
arg isfile /sys/include/$1
data set $file
attr add addr=$3
plumb to edit
plumb start window sam $file

## See also[edit]

* Free and open-source software portal

* Pipeline (software)

## External links[edit]

* `plumb(1)` – Plan 9 Programmer's Manual, Volume 1
* `plumb(2)` – Plan 9 Programmer's Manual, Volume 1
* `plumber(4)` – Plan 9 Programmer's Manual, Volume 1
* `plumb(6)` – Plan 9 Programmer's Manual, Volume 1
* "Plumbing and Other Utilities" by Rob Pike
* A port of plumber to Unix-like operating systems
* Plumbing extension for urxvt

This article related to a type of software is a stub. You can help Wikipedia by expanding it.

|

* v
* t
* e

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template